de perldoc perlre
Las variables numeradas fósforo ($ 1, $ 2, $ 3, etc.) y el conjunto de puntuacion relacionados ($ +, $ &, $ `, $' y $^N) son todo tiene un alcance dinámico hasta el final del bloque delimitador o hasta la próxima coincidencia exitosa, lo que ocurra primero. (Véase "Declaraciones" compuestos "" en perlsyn.)
Esto significa que la primera vez que se ejecuta una expresión regular o sustitución en un ámbito se crea una nueva copia local
zado. El valor original se restablece (y agrave; la local) cuando finaliza el alcance. Por lo tanto, $1
será 10 hasta que se ejecute la expresión regular, 20 después de la expresión regular y 10 nuevamente cuando la subrutina haya finalizado.
Pero no utilizo las variables regex fuera de las sustituciones. Me parece mucho más claro decir cosas como
#!/usr/bin/perl
use strict;
use warnings;
sub bla {
my $x = shift;
$x =~ s/(\d*)/$1 $1/;
return $x;
}
my $y = "10 20";
my ($first, $second) = $y =~ /(\w*)\s+(\w*)/;
my $z = &bla($second);
my $w = $first;
print "$first $second\n";
donde $first
y $second
tienen mejores nombres que describen su contenido.
No entiendo la documentación que citó. Tal vez no estoy seguro de las implicaciones de "alcance dinámico". Entonces, ¿cuál es la respuesta a la pregunta? –
Ver http://perl.plover.com/FAQs/Namespaces.html –
@Rob Kennedy He aclarado qué significa el alcance dinámico. También es posible que desee consultar http://perldoc.perl.org/perlfaq7.html#What%27s-the-difference-between-dynamic-and-lexical- (static) -scoping% 3F - Between-local () -and-my()% 3F –