peer definida en la línea 22
llama a la subrutina interior. ¿Podría identificar
que subrutina es llamada? ¿La de la línea 5 o la de la
línea 14?
lhp@nereida:~/Lperl/src$ cat -n localsub.pl
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 sub interior {
6 my $x = shift;
7 print "En sub 'interior global': $x\n";
8 }
9
10 sub exterior {
11 my $x = $_[0];
12 no strict 'refs';
13 no warnings;
14 local *interior = sub {
15 print "En sub interior anidada\n";
16 return shift() - 1
17 };
18 print "En sub exterior. Llamo a la sub 'peer(5)'\n";
19 peer(5);
20 }
21
22 sub peer {
23 print "En sub peer. Llamo a 'interior'\n";
24 interior(shift())."\n";
25 }
26
27 exterior(2);
28 interior(3);
Al ejecutar el programa localsub.pl
se produce la siguiente salida:
lhp@nereida:~/Lperl/src$ localsub.pl En sub exterior. Llamo a la sub 'peer(5)' En sub peer. Llamo a 'interior' En sub interior anidada En sub 'interior global': 3
lhp@nereida:~/Lperl/src$ cat -n ./privatesub.pl
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 package One;
6 sub tutu {
7 my $x = shift;
8 print "En sub 'One:tutu ': $x\n";
9 }
10
11 package Two;
12 sub tutu {
13 my $package = caller;
14 die "Attempt to call private function Two:tutu"
15 unless ($package eq __PACKAGE__);
16
17 my $x = shift;
18 print "En sub 'Two:tutu ': $x\n";
19 }
20
21 package main;
22 One::tutu(3);
23 Two::tutu(5);
Casiano Rodríguez León
