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 01:06
#65839 #65839
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=Strat,13.05.2006, 22:34]wieso? soll code wie der folgende wirklich eine warnung auswerfen?
Code: (dl )
1
2
while( <$FH> ) { last if /^\s*\#/ }
print "Der erste Kommentar oder shebang lautet: $_\n";
[/quote]
Wenn diese Zeilen in einer Sub-Routine oder in einem Modul stehen, dann ja.

Quote
Dann muesste man IMHO auch bei den folgenden Konstrukten
Warnungen ausgeben:
Code: (dl )
1
2
3
4
5
foreach (@list3) {
$_ = 20;
}
# oder
@list1 = map { s/([^aeiou])/$1b$1/ig } @list2;

weil man da - absichtlich oder unabsichtlich - das input-array veraendert.

Der erste Fall sieht mir eigentlich ziemlich beabsichtigt aus, weil das $_ innerhalb der Schleife nicht weiter verwendet wird. Daher ist es anscheinend die Absicht des Programmierers, das Array an sich zu veraendern.

Im zweiten Fall koennte man tatsaechlich eine Warnung ausgeben, weil es ein häufiger Fehler ist und ich mir wenige sinnvolle Anwendungen vorstellen kann, wo man ein derartiges Array wie @list1 braucht.

Warnungen auszugeben ist natuerlich immer problematisch, wenn man nicht sicher ist, ob etwas beabsichtigt ist oder nicht. Das ist aber bei while(<>) definitiv nicht der Fall. Selbst wenn ein Programmierer beabsichtigt, an die aufrufende Funktion ueber $_ die zuletzt eingelesene Zeile zurueckzugeben, ist das ein wirklich schlechter Stil.

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