Woher kommt $ _ in dieser Perl-foreach-Schleife?

8

Ich habe das in Mail :: IMAPClient gefunden. Woher kommt die $_ in $SEARCH_KEYS{ uc($_) } ?

%Vor%     
sid_com 29.04.2010, 09:49
quelle

2 Antworten

8

Das sieht für mich wie ein Tippfehler aus, wo der Autor eine anonyme FOR-Schleife foreach (@args) in eine explizite Iterator-Variable foreach my $v (@args) konvertiert hat und vergessen hat, alle Inzidenzen von $_ in $v zu konvertieren.

Sie sollten wahrscheinlich einen Fehler gegen die Verteilung auf CPAN einreichen.

    
Ether 29.04.2010, 14:17
quelle
2

Auch wenn dies wahrscheinlich ein Fehler ist, betrachten wir, wie sich dieser Code verhält.

Der Wert von $_ wird vom aktuellen dynamischen Bereich bestimmt. Was das bedeutet ist, dass $_ irgendeinen Wert (die dynamisch beschränkte Kopie von) $_ in der aufrufenden Subroutine hat.

Also zum Beispiel wenn ich:

%Vor%

Sie erhalten eine Ausgabe wie:

%Vor%

Es wird etwas seltsamer in Perl 5.10 und höher, wo eine lexikalische $_ existiert.

%Vor%

Führe das aus und hole:

%Vor%

Wie Sie sehen können, ist dies wahrscheinlich eine schlechte Idee, wenn dies kein Fehler ist.

    
daotoad 30.04.2010 18:59
quelle

Tags und Links