$_
ist der "Standardeingabe- und Musterabgleichplatz". Mit anderen Worten, wenn Sie von einem Datei-Handle am Anfang einer while-Schleife einlesen oder eine foreach-Schleife ausführen und keine Loop-Variable benennen, wird $_
für Sie eingerichtet.
Wenn Sie jedoch eine foreach-Schleife schreiben und eine Schleife Variablenname, wird $ _ nicht gesetzt up.This kann durch folgenden Code gerechtfertigt werden:
1. #!/usr/bin/perl -w
2. @array = (1,2,3);
3. foreach my $elmnt (@array)
4. {
5. print "$_ ";
6. }
Der Ausgang „Die Verwendung von nicht initialisierten Wert in Verkettung sein (.)“
jedoch, wenn Sie ersetzen Zeile 3 von:
foreach (@array)
Der Ausgang "1 2 3", wie erwartet.
Jetzt ist es immer besser, eine Schleifenvariable in einer foreach-Schleife zu benennen, um den Code lesbarer zu machen (Perl ist schon wegen der geringeren Lesbarkeit verflucht), so dass auch keine explizite Notwendigkeit besteht Zuweisung an die Variable $_
und die daraus resultierenden Probleme mit dem Umfang.
Gute Antwort, ++. Ich stimme jedoch nicht zu, dass 'for (@array) {}' nur verwendet werden sollte, wenn Sie hauptsächlich mit '$ _' arbeiten. Die Tatsache, dass die erste Version eine Kopie erzwingt, ist vorteilhaft, wenn Sie vorhaben, den Wert von $ scalar zu ändern. Es gibt keinen Grund, 'für meinen $ alias (@array) {my $ scalar = $ alias; ...} '. Dies ist in einer besonders gültigen Verwendung der topicizer Form der for-Schleife. – daotoad
@daotoad => Ich stimme zu, antworten aktualisiert, danke für das Abfangen –