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
[quote=opi,13.05.2006, 22:34][...]
In nur einem Modul habe ich ein while(my $line = <FH>){} entdeckt, in den anderen Modulen ein while(<FH>){} ohne local $_; und auch foreach(<FH>){}. [...][/quote] Aber foreach (<FH>) { ... } ist ja eben gerade kein Problem, nur while (<FH>) { ... } ist eines, wenn man einmal davon absieht, dass foreach (<FH>) { ... } eine gewaltige Speicherplatzverschwendung werden kann. Ich finde aber trotz Strats Erklärungsversuch das Verhalten von while buggy, und zwar aus folgendem Grund: Wäre die while-Bedingung einfach nur eine if-Abfrage, dann sollte man auf keinen Fall erwarten, dass ihr Wert überhaupt in $_ gespeichert wird. Da dies aber doch passiert, und zwar nur in dem speziellen Fall, dass über das Resultat eines readline-Aufrufes iteriert wird, und dabei immerhin noch genug Magie aktiv wird, um ein while (<FH>) { ... } effektiv in ein while (defined($_ = <FH>)) { ... } zu verwandeln, wäre es meines Erachtens sinnvoller auch noch $_ zu lokalisieren, zumal der am Schleifenende in $_ gespeicherte Wert in den allermeisten Fällen reichlich nutzlos ist. When C++ is your hammer, every problem looks like your thumb.
|