Ah, logisch, der BEGIN Block wird natürlich ausgeführt, bevor die andere Zuweisung zu der Variablen erfolgt.
Allerdings bleiben da folgende Fragen bei mir offen:
- wenn der BEGIN Block zuerst ausgeführt wird, warum gibt es dann trotz use strict keine Probleme mit der Zuweisung an eine nicht näher qualifizierte Globale Variable?
(edit:
Der folgende Code
use strict;
use warnings;
BEGIN { $stuff = 0; }
funktioniert ja auch nicht ohne Fehler, schreibt man aber ein my $stuff oder our $stuff vor den BEGIN Block, dann beschwert sich Perl nicht mehr...)
- wenn das my $stuff = undef nach dem BEGIN Block ausgeführt wird, warum erzeugt es dann nicht, wie my $stuff = 0 das offenbar tut, eine neue lexikalische Variable, die die alte globale verdeckt?
Bei meinem Perl gibt das Beispiel mit "my $stuff = undef;" übrigens keine Warnung!
$ perl --version
This is perl, v5.8.6 built for darwin-thread-multi-2level
[...]
\n\n
<!--EDIT|murphy|1126781614-->
When C++ is your hammer, every problem looks like your thumb.