You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
test_some_subroutine @x, 'hi', @y; # 7 argument(s) passed into subroutine
# @_ = ( 1, 2, 3, 'hi', 'a', 'b', 'c' ) # Done internally for this call
Si su test_some_subroutine contiene la instrucción $_[4] = 'd' , para la llamada anterior causará
que $y[0] tenga un valor d después:
print "@y"; # d b c
Lista de retorno de subrutina
Por supuesto, puede devolver listas de subs:
sub foo {
my @list1 = ( 1, 2, 3 );
my @list2 = ( 4, 5 );
}
return ( @list1, @list2 );
my @list = foo();
print @list; # 12345
Pero no es la forma recomendada de hacerlo a menos que sepa lo que está haciendo.
Si bien esto está bien cuando el resultado está en el contexto LISTA , en el contexto SCALAR las
cosas no están claras. Echemos un vistazo a la siguiente línea:
print scalar foo(); # 2
¿Por qué 2 ? Que esta pasando?
1. Debido a que foo() evaluó en el contexto SCALAR , esta lista ( @list1, @list2 ) también se
evaluó en el contexto SCALAR
2. En contexto SCALAR , LIST devuelve su último elemento. Aquí está @list2
3. De nuevo en el contexto SCALAR , array @list2 devuelve el número de sus elementos. Aquí
está el 2 .
En la mayoría de los casos, la estrategia correcta devolverá las referencias a las estructuras
de datos .
Así que en nuestro caso deberíamos hacer lo siguiente:
return ( \@list1, \@list2 );
Luego, la persona que llama hace algo como esto para recibir los dos arrayrefs devueltos:
my ($list1, $list2) = foo(...);
Usando arrayref para pasar array a sub
https://riptutorial.com/es/home 66