ich hab recht das strict mich nicht dazu zwingt diese explizit zu deklarieren um diese Verwirrung zu vermeiden.
Fast: strict zwingt Dich dann dazu, wenn die Variable *zuvor und im selben Scope* nicht deklariert wurde. In Deinen Beispielen tust Du das. Mal ein anderes Beispiel:
for $x (1..3) {
print $x;
}
# lexical scope?
print $x; # use of uninitialized value...
# package variable?
print $main::x; # use of uninitialized value...
Lasse obigen Code unter srict laufen, und das Script stirbt.
FAZIT: Vorsicht mit Iteratorvariablen ...
Sehe ich nicht so. Zwei Möglichkeiten hat man: entweder man verwendet eine zuvor deklarierte Variable, was m.E. schlechter Stil ist, oder man deklariert die Iterationsvariable ausdrücklich mit my. Die Redundanz der Deklaration mit my ist das, was ich als Konzeptfehler ansehe, denn die Iterationsvariable ist, wie wir ja festgestellt haben, von Haus aus privat, sodass my eigentlich überflüssig ist.
Btw, say ist doch Perl6-Syntax, oder irre ich mich?
Siechfred
Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.