Cuando una variable se pasa por referencia, la función opera sobre los datos originales de la función. Pasar por referencia permite que la función cambie el valor original de una variable.
Cuando se cambian los valores de los elementos en las arrays de argumentos @_, los valores de los argumentos correspondientes también cambiarán. Esto es lo que hace pasar parámetros por referencia.
En el ejemplo que se muestra a continuación, cuando actualizamos los elementos de una array @a en la muestra de subrutina, también cambia el valor de los parámetros que se reflejarán en todo el programa. Por lo tanto, cuando los parámetros se llaman por referencia, cambiar su valor en la función también cambia su valor en el programa principal.
Ejemplo 1:
#!/usr/bin/perl # Initialising an array 'a' @a = (0..10); # Array before subroutine call print("Values of an array before function call: = @a\n"); # calling subroutine 'sample' sample(@a); # Array after subroutine call print("Values of an array after function call: = @a"); # Subroutine to represent # Passing by Reference sub sample { $_[0] = "A"; $_[1] = "B"; }
Producción:
Values of an array before function call: = 0 1 2 3 4 5 6 7 8 9 10 Values of an array after function call: = A B 2 3 4 5 6 7 8 9 10
Así es como funciona el programa: –
- Se define una array que consta de valores de 0 a 10.
- Además, esta array se pasa a la subrutina ‘muestra’.
- Ya se ha definido una subrutina ‘muestra’. Dentro de este, los valores del primer y segundo parámetro se cambian a través de la array de argumentos @_.
- Los valores de la array @a se muestran después de llamar a la subrutina. Ahora los dos primeros valores del escalar se actualizan a A y B respectivamente.
Ejemplo 2:
#!/usr/bin/perl # Initializing values to scalar # variables x and y my $x = 10; my $y = 20; # Values before subroutine call print "Before calling subroutine x = $x, y = $y \n"; # Subroutine call sample($x, $y); # Values after subroutine call print "After calling subroutine x = $x, y = $y "; # Subroutine sample sub sample { $_[0] = 1; $_[1] = 2; }
Producción:
Before calling subroutine x = 10, y = 20 After calling subroutine x = 1, y = 2
Publicación traducida automáticamente
Artículo escrito por rupanisweety y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA