Was ich jetzt noch nicht verstehe ist, wenn ich schreibe "BEGIN { print 'test' }" wird das gleich ganz am Anfang ausgefuehrt, egal wo ob es am Anfang oder Ende des Scripts steht - was ja noch klar ist - aber wenn ich "use strict" am Ende des Programms schreibe hat es keine Wirkung auf den vorherigen Quellcode. Das wiederspricht irgendwie deiner Aussage.
Ja, BEGIN ist insofern verwirrend als Name. Die von strict provozierten Fehler werden während der *Kompilierung* gezogen, nicht zur Laufzeit. Letztlich weist "use strict" im chronologischen Ablauf eines Scriptes den Compiler an, innerhalb des aktuellen Blocks alles ab da nach den strikten Regeln zu kompilieren. So ist auch der entsprechende Teil der Fehlermeldung zu verstehen:
"Execution of bla.pl aborted due to compilation errors."
So könnte man auch folgendes machen:
sub foo {
use strict;
my $foo = 42;
return $foo;
}
$bar = foo();
print $bar;
Und es gibt keinen Fehler.
...der automagische Aufruf ...
Hat das was mit den hier so oft erwaehnten Glaskugeln zu tun? ;)
Nene, Perl hat schon einiges an Automagie ;)
Siechfred
Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.