Respuesta
Esto es por lo general un modismo para: $ x es una variable local asignado al primer parámetro pasado a la subrutina, aunque.
my ($x) = @_;
es probablemente más claro (y no modifica la lista de argumentos).
La función shift
elimina el primer elemento de una matriz y lo devuelve. La matriz se acorta en un elemento.
La matriz predeterminada (si no se proporciona uno como parámetro) es @_
si está en una función, o @ARGV
si se encuentra en el alcance del archivo.
En este caso, $x
se está configurando en el primer parámetro de función o en el primer parámetro de línea de comando.
Se debe agregar que @_ es la matriz que contiene los parámetros dados a una función, y @ARGV es la matriz que contiene los parámetros dados a un programa. – Svante
Si se encuentra en una subrutina, esta línea será shift
en @_
(los parámetros que se pasan).
Así que $x
sería el primer elemento popped
de la matriz @_
.
Así que por lo general se vería $x = shift if @_;
No es necesario para el if. "mi $ x = cambio"; y "my $ x; $ x = shift if @_;" son equivalentes y ambos darán como resultado que $ x no sea undef si @_ está vacío, ni violarán estrictamente ni emitirán una advertencia. La única diferencia es la cantidad de tipeo que tienes que hacer. –
shift()
una construida en Perl subrutina que toma una matriz como argumento, entonces vuelve y elimina el primer elemento de la matriz. Es una práctica común obtener todos los parámetros pasados a una subrutina con llamadas shift
. Por ejemplo, supongamos que tiene una subrutina foo
que toma tres argumentos. Una forma de obtener estos parámetros asignados a las variables locales es con shift
así:
sub foo() {
my $x = shift;
my $y = shift;
my $z = shift;
# do something
}
La confusión aquí es que parece cambio no se está pasando una matriz como un argumento. De hecho, se está pasando la matriz "predeterminada" implícitamente, que es @_
dentro de una subrutina o @ARGV
fuera de una subrutina.
o @ARGV, si no está en una función (ver mi respuesta) – Alnitak
no desea el '()' después del nombre del subtítulo - debe ser 'sub foo {...'. Con el '()' estás diciendo que foo no acepta argumentos, que no es lo que quieres en este caso – EvdB
Prefiero usar 'sub foo {my ($ x, $ y, $ z) = @_}' mismo es menos repetitivo –
En Perl, muchos métodos usan las variables predeterminadas ($_
y @_
) si no especifica explícitamente los argumentos. Su código es idéntica a:
my $x = shift @_;
como señaló PullMonkey anteriormente, dentro de una subrutina, @_
contiene los argumentos que se pasan a la subrutina (como se describe en perlsub
). shift
eliminará el primer valor de argumento de @_
y lo almacenará en $x
, por lo que $_[0]
ahora le dará el segundo argumento pasado a su subrutina.
en el lenguaje de un laico, desde un punto de vista muy alto nivel, cambio está tomando el primer elemento de una matriz (la parte más a la izquierda), mientras que lo contrario es pop que está teniendo el último elemento de la matriz (la más a la derecha parte).
my @array1=(5,6,7,8,9); my $x = shift @array1; print "$x\n"; # 5 print "@array1\n"; # 6 7 8 9
- 1. ¿Qué hace '@_' en Perl?
- 2. ¿Qué hace Ruby's Array # shift hacer?
- 3. ¿Qué hace el DumpXS en Data :: Dumper de Perl?
- 4. Perl: ¿qué hace checkstack.pl en la fuente de Linux?
- 5. ¿Qué hace "seleccionar ((seleccionar (s), $ | = 1) [0])" hacer en Perl?
- 6. ¿Qué significa "Shift: =" en este código VB6?
- 7. ¿Qué hace esta línea perl de un archivo "blanqueado"?
- 8. ¿Por qué a Perl :: Critic no le gusta usar shift para poblar variables de subrutina?
- 9. ¿Por qué hay dos operadores Right Shift y solo un operador Left Shift en Java?
- 10. ¿Cómo saber qué tecla SHIFT se presionó?
- 11. ¿Por qué no hay un String # shift()?
- 12. PHP Shift Shift dando dos respuestas en dos máquinas diferentes
- 13. ¿Qué significa para (;;) en Perl?
- 14. ¿Qué hace% en JavaScript?
- 15. ¿Qué hace% {} en Ruby?
- 16. ¿Qué hace == en Ruby?
- 17. ¿Qué significa "~~" en Perl?
- 18. ¿Qué significa "\" en Perl?
- 19. ¿Qué es @. en Perl?
- 20. Shift de Java a C++
- 21. ¿Cómo se hace el diseño por contrato en Perl?
- 22. mapa alt + shift +] en vim
- 23. ¿Qué hace [:]?
- 24. emacs equivalente a vim shift-h y shift-l
- 25. ¿Qué significa realmente la palabra clave "no" en Perl?
- 26. ¿Por qué Perl aplasta mi matriz?
- 27. Shift + mouseover con jQuery
- 28. selección Impedir Shift + Clic
- 29. ¿Qué hace typedef en C++
- 30. ¿Qué hace 'zoom' en CSS?
No importa si lo buscó en Google o no.Es una gran pregunta y definitivamente debe formar parte de la base de datos de Stack Overflow. – cowgod
@friedo - ¡De acuerdo, 100%! Esto no debería convertirse en un sitio de "léame los documentos a mí". –
'perldoc -f shift' contiene información útil de" perlfunc ". Ver [perfun] (http://perldoc.perl.org/perlfunc.html), o incluso [perlfun: shift()] (http://perldoc.perl.org/functions/shift.html). Ninguna de las respuestas hace un buen trabajo al vincular/extraer de la documentación. Entonces, "RTFM" o no, se debe incluir una referencia. –