Tengo un código que no funciona de la manera que esperaba, y agradecería algo de ayuda para averiguar cómo hacerlo funcionar de la manera que YO ESPERO.Modificando matriz en la subrutina
Me gustaría usar una subrutina para modificar una matriz de entrada. Pensé que si pasaba una referencia a la matriz, cualquier cambio que realizara se reflejaría también en la versión de la persona que llama. Pero aparentemente no funciona de esa manera.
my @test_array = qw (zero one two three);
shift_array(\@test_array);
print "POST SUBROUTINE: $test_array[0]\n";
sub shift_array {
my @array = @{(shift)};
shift @array;
print "AFTER SHIFT IN SUB: $array[0]\n";
}
Esta impresora:
AFTER SHIFT IN SUB: one POST SUBROUTINE: zero
esperaba que imprime one
en ambas ocasiones.
Así que mi pregunta es doble:
1) ¿Por qué no se comporta de la manera que cree que debería? ¿Pasar una referencia a una matriz crea una copia de la matriz?
2) ¿Cómo obtengo el comportamiento que estaba esperando? ¿Cómo obtengo una subrutina para deslizar uno o más elementos fuera de la parte frontal de la copia de una matriz de entrada?
Gracias de antemano por cualquier información que pueda ofrecer.
Wow. Ese es un matiz que no entendí. ¡Gracias! – BlairHippo
@mob estás en lo correcto. Al editar mi respuesta para aclarar – Cfreak
, tenga en cuenta que con Perl 5.14+ puede escribir 'shift $ array' en el sub y que la eliminación de referencias ocurre automágicamente. – mirod