da perldoc perlre
Le variabili numerate partita ($ 1, $ 2, $ 3, ecc) e il relativo set di punteggiatura ($ +, $ &, $ `, $', e $^N) sono tutti con ambito dinamico fino alla fine del blocco che lo racchiude o fino alla successiva corrispondenza di successo, a seconda dell'evento che si verifica per primo. (Vedere "" istruzioni composte "" in perlsyn.)
Ciò significa che la prima volta che si esegue una regex o la sostituzione in un ambito viene creato un nuovo local
copia izzato. Il valore originale viene ripristinato (è locale) quando termina l'ambito. Quindi, $1
sarà 10 fino a eseguire la regex, 20 dopo la regex e 10 di nuovo quando la subroutine è terminata.
Ma io non uso le variabili regex al di fuori di sostituzioni. Trovo molto più chiaro per dire le cose come
#!/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";
dove $first
e $second
hanno nomi che descrivono meglio il loro contenuto.
fonte
2009-06-27 15:09:05
Non capisco la documentazione che hai citato. Forse non sono chiaro sulle implicazioni di "ambito dinamico". Allora, qual è la risposta alla domanda? –
Vedere http://perl.plover.com/FAQs/Namespaces.html –
@Rob Kennedy Ho chiarito cosa significa scope dinamico. Potresti anche voler dare un'occhiata a http://perldoc.perl.org/perlfaq7.html#What%27s-the-difference- between-dynamic-and-lexical- (static) -scoping% 3F - Between-local () -and-my()% 3F –