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