Thread Tiefe Hash Strukturen aus Config bilden: Und warum while(<FH>) gefährlich ist (62 answers)
Opened by bloonix at 2006-05-09 17:07

betterworld
 2006-05-14 00:11
#65837 #65837
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=Strat,11.05.2006, 16:07]Eine while-schleife ist ja im grunde nur ein if-block, der wiederholt ausgefuehrt wird (solange halt die bedingung wahr ist) Und bei einem if ( BEDINGUNG ) ist es ja auch klar, dass man, wenn man einen lokalen wert verwenden will, diesen selbst lokalisieren muss, z.B.
Code: (dl )
if( my $x = &SubBlabla(@params) ) {

wird's jetzt klara?[/quote]
Es ist schon einleuchtend. Aber ich bin ueberzeugt, dass viele Leute sich dessen nicht bewusst sind. Mit einem einfachen grep auf @INC-Verzeichnisse habe ich z. B. Module::ScanDeps gefunden. Und siehe da:
Code: (dl )
1
2
3
4
$ perl -e '$_="erfolgreich"; use Module::ScanDeps; print $Module::ScanDeps::VERSION, "\n"; scan_deps(files=>["lib/MyApp.pm"]); print "test $_\n"'
0.59
test
$


Mir war es am Anfang auch nicht bewusst.

Zu meiner Frage: Es ist in der Dokumentation erwaehnt, und zwar in perlop:
Quote
The $_ variable is not implicitly localized. You'll have to put a "local $_;"
before the loop if you want that to happen.
Das ist aber meiner Meinung nach nicht genug, denn wie in Module::ScanDeps zu sehen ist, tappt man viel zu leicht in die Falle. Vielleicht sollte einfach eine Warnung ausgegeben werden, wenn while(<>) in einer nicht $_-lokalisierten Umgebung benutzt wird.

View full thread Tiefe Hash Strukturen aus Config bilden: Und warum while(<FH>) gefährlich ist