print pagina oficial array perl variables

pagina - ¿Cuál es el significado de @_ en Perl?



perl pagina oficial (9)

¿Cuál es el significado de @_ en Perl?


¡¡Nunca intente editar a @_ variable !!!! No se deben tocar. O se obtiene un efecto insospechado. Por ejemplo...

my $size=1234; sub sub1{ $_[0]=500; } sub1 $size;

Antes de llamar a sub1 $ size, contiene 1234. Pero después de 500 (!!) ¡Así que no editas este valor! ¡Puede pasar dos o más valores y cambiarlos en subrutina y todos serán cambiados! Nunca he visto describir este efecto. Los programas que he visto también dejan @_ array de solo lectura. Y solo que puede pasar con seguridad una variable no cambia la subrutina interna. Siempre debe hacer eso:

sub sub2{ my @m=@_; .... }

asigne @_ a variables de procedimiento de subrutina local y luego trabaje con ellas. También en algunos algoritmos recursivos profundos que vuelven la matriz, puede utilizar este enfoque para reducir la memoria utilizada para los vars locales. Solo si devuelve @_ array del mismo modo.


El primer golpe de una búsqueda de perl @_ dice this :

@_ es la lista de parámetros entrantes a un sub.

También tiene una explicación más larga y más detallada de la misma.


La pregunta era qué significa @_ en Perl. La respuesta a esa pregunta es que, en la medida en que $_ significa en Perl, @_ significa de manera similar.

Nadie parece haber mencionado este aspecto crítico de su significado, así como el de ellos .

En consecuencia, ambos se usan como pronombres, o a veces como tópicos.

Por lo general, tienen antecedentes nominales, aunque no siempre.


También puede usar shift para variables individuales en la mayoría de los casos:

$var1 = shift;

Este es un tema en el que debe investigar más, ya que Perl tiene una serie de formas interesantes de acceder a información externa dentro de su sub rutina.


También si una función devuelve una matriz, pero se llama a la función sin asignar sus datos devueltos a ninguna de las variables siguientes. Aquí se invoca split (), pero no se asigna a ninguna variable. Podemos acceder a sus datos devueltos más tarde a través de @_:

$str = "Mr.Bond|Chewbaaka|Spider-Man"; split(//|/, $str); print @_[0]; # ''Mr.Bond''

Esto dividirá la cadena $str y establecerá la matriz @_ .



Usualmente, @_ los parámetros pasados ​​a un sub usando la variable @_ :

sub test{ my ($a, $b, $c) = @_; ... } # call the test sub with the parameters test(''alice'', ''bob'', ''charlie'');

Esa es la forma en que se afirma que es correcto por perlcritic .


perldoc perlvar es el primer lugar para verificar cualquier información especial de Perl variable.

Citando:

@_ : dentro de una subrutina, la matriz @_ contiene los parámetros pasados ​​a esa subrutina.

Se pueden encontrar más detalles en perlub perlub (subrutinas Perl) vinculadas desde perlvar:

Cualquier argumento pasado en aparece en la matriz @_ .

Por lo tanto, si llamó a una función con dos argumentos, estos se almacenarían en $_[0] y $_[1] .

La matriz @_ es una matriz local , pero sus elementos son alias para los parámetros escalares reales . En particular, si se actualiza un elemento $ _ [0], se actualiza el argumento correspondiente (o se produce un error si no se puede actualizar).

Si un argumento es un elemento de matriz o hash que no existía cuando se llamó a la función, ese elemento se crea solo cuando (y si) se modifica o se toma una referencia a él. (Algunas versiones anteriores de Perl creaban el elemento independientemente de si el elemento estaba asignado o no). La asignación a toda la matriz @_ elimina ese alias y no actualiza ningún argumento.


@ se usa para una matriz.

En una subrutina o cuando llama a una función en Perl, puede pasar la lista de parámetros. En ese caso, @_ se puede usar para pasar la lista de parámetros a la función:

sub Average{ # Get total number of arguments passed. $n = scalar(@_); $sum = 0; foreach $item (@_){ # foreach is like for loop... It will access every # array element by an iterator $sum += $item; } $average = $sum / $n; print "Average for the given numbers: $average/n"; }

Llamada de función

Average(10, 20, 30);

Si observa el código anterior, consulte la línea foreach $item(@_) ... Aquí pasa el parámetro de entrada.