"Änderung eines schreibgeschützten Wertes" in der while-Schleife mit der impliziten Variable $ _

8

Ich verstehe nicht wirklich warum das folgende Stück Perlcode

%Vor%

Gibt den folgenden Fehler aus:

%Vor%

Ist das ein Fehler? Oder sollte ich etwas über die Verwendung der magischen / impliziten Variable $_ wissen?

    
Juan A. Navarro 12.10.2011, 11:51
quelle

2 Antworten

11

Das while (<fh>) -Konstrukt weist implizit der globalen Variablen $_ zu.

Dies wird in perlop beschrieben:

  

Wenn und nur wenn das Eingabesymbol das einzige Ding innerhalb des ist   abhängig von einer while-Anweisung (...), ist der Wert automatisch   zugewiesen an die globale Variable $ _, zerstört was auch immer da war   vorher. (...) Die Variable $ _ ist nicht implizit lokalisiert. Du wirst   muss ein lokales $ _ setzen; vor der Schleife, wenn Sie möchten, dass dies geschieht.

Der Fehler wird ausgelöst, weil $_ anfänglich auf einen konstanten Wert ( "a" ) aliasiert ist.

Sie können dies vermeiden, indem Sie eine lexikalische Variable deklarieren:

%Vor%     
Eugene Yarmash 12.10.2011, 12:03
quelle
9

Ja, die while-Schleife liest in $_ , das an diesem Punkt als Alias ​​zu einer Konstanten (der String "a") verwendet wird. Sie sollten local $_; vor der while-Schleife verwenden oder in eine separate Variable einlesen.

    
Kusalananda 12.10.2011 12:07
quelle

Tags und Links