local
permite emular el efecto:
$ cat -n nestedsub.pl 1 #!/usr/local/bin/perl5.8.0 -w 2 3 sub interior { 4 my $x = shift; 5 print "sub marine: $x\n"; 6 $x*$x; 7 } 8 9 sub exterior { 10 my $x = $_[0] + 3; 11 local *interior = sub { print "interior anidada: $x\n"; return $x - 1 }; 12 return $x + interior(); 13 } 14 15 16 print 'exterior(2) = ',exterior(2),"\n"; 17 print 'interior(3) = ',interior(3),"\n";En este ejemplo se ha creado en la línea 11 una subrutina denominada
interior
que ensombrece a la subrutina interior
global
definida en la línea 3 y que además tiene acceso al
ámbito de exterior
. Esta subrutina interior
de la línea
11 es accesible solamente
desde la subrutina exterior
.
El resultado de la ejecución es:
$ ./nestedsub.pl Subroutine main::interior redefined at ./nestedsub.pl line 11. interior anidada: 5 exterior(2) = 9 sub marine: 3 interior(3) = 9