Hallo,
am Wochenende habe ich ein altes Perl Programm von ein paar Krankheiten befreit und bin ueber folgendes komisches Verhalten gestolpert: Kern des Problems ist, dass implizit eine Variable veraendert wird, obwohl nichts zugewiesen wird und auch keine Referenzen im Spiel sind. Ich habe mal ein Codebeispiel konstruiert:
#!/bin/perl $foo="perl_my_language_of_choice"; for ($foo) { # jetzt steht in $_ der Inhalt von $foo SWITCH : { # in diesem benannten Block wird nun gegen $foo # verzweigt /java_my_language_of_choice/ && do { print "java ist toll!\n"; }; /perl_my_language_of_choice/ && do { open (HN, "</etc/hostname"); while (<HN>) { # das lesen von einem Dateihandle ohne # Variablenzuweisung schreibt den Inhalt in $_ # daduerch wird aber auch $foo veraendert } print $foo; }; } } if ($foo ne "perl_my_language_of_choice") { # pruefung auf veraenderung print "ueberraschung!"; } else { print $foo; }
Die Ausgabe ist dann "ueberraschung!". Das sieht so aus, als waere $foo = $_ also eine Referenz auf $_ Ist das ein Bug? Sollte man das an Larry Wall posten? $ perl -v This is perl, version 5.005_03 built for i386-linux
andre
Andre Schulze schrieb:
[...] Ist das ein Bug? Sollte man das an Larry Wall posten? $ perl -v This is perl, version 5.005_03 built for i386-linux
Nein; "man perlsyn":
| [...] | Foreach Loops | [...] If | VAR is omitted, `$_' is set to each value. If any element | of LIST is an lvalue, you can modify it by modifying VAR | inside the loop. That's because the `foreach' loop index | variable is an implicit alias for each item in the list that | you're looping over. | [...]
Tim
Am Son den 22 Okt 2000 um 08:13:03 +0000 schrieb Tim Landscheidt:
Andre Schulze schrieb:
[...] Ist das ein Bug? Sollte man das an Larry Wall posten? $ perl -v This is perl, version 5.005_03 built for i386-linux
Nein; "man perlsyn":
| [...] | Foreach Loops | [...] If | VAR is omitted, `$_' is set to each value. If any element | of LIST is an lvalue, you can modify it by modifying VAR | inside the loop. That's because the `foreach' loop index | variable is an implicit alias for each item in the list that | you're looping over. | [...]
Super, das war genau die Loesung meines Denkfehlers, danke,
andre
lug-dd@mailman.schlittermann.de