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
