Para que los prototipos trabajen de esta forma
la llamada a la función debe hacerse sin prefijarse de &
.
Vea el siguiente ejemplo:
$ cat -n ./shift2.pl 1 #!/usr/bin/perl -w 2 use strict; 3 4 sub shift2(\@) { my $arr = shift; splice @$arr, 0, 2 } 5 6 my @a = 1..6; 7 my ($f, $g) = shift2 @a; 8 9 local $" = ','; 10 print "f = $f, g = $g \@a = (@a)\n"; 11 12 ($f, $g) = shift2(@a); 13 print "f = $f, g = $g \@a = (@a)\n"; 14 15 # dará error 16 ($f, $g) = &shift2(@a); 17 print "f = $f, g = $g \@a = (@a)\n"; $ ./shift2.pl f = 1, g = 2 @a = (3,4,5,6) f = 3, g = 4 @a = (5,6) Can't use string ("5") as an ARRAY ref while "strict refs" in use at ./shift2.pl line 4.La llamada de la lınea 16 produce un error: lo queda de
@a
es enviado como parámetro a la rutina y se produce la protesta.
Casiano Rodríguez León