Welche Rolle spielt der BEGIN-Block in Perl?

Ich weiß, dass der BEGIN-block wird kompiliert und ausgeführt, bevor der Hauptteil, ein Perl-Programm. Wenn Sie sich nicht sicher sind, die gerade versuchen, den Befehl ausführen perl -cw über diese:

#!/ms/dist/perl5/bin/perl5.8

use strict;
use warnings;

BEGIN {
    print "Hello from the BEGIN block\n";
}

END {
    print "Hello from the END block\n";
}

Habe ich gelernt, dass Anfang der Kompilierung und der Ausführung der BEGIN-block kann ein Programmierer sicherstellen, dass alle benötigten Ressourcen verfügbar sind, bevor das main-Programm ausgeführt wird.

Und so habe ich mit BEGIN-Blöcke, um sicherzustellen, dass Dinge wie DB-verbindungen eingerichtet wurden und verfügbar sind für die Nutzung durch das Hauptprogramm. Ebenso verwende ich ENDE Blöcke, um sicherzustellen, dass alle Ressourcen sind geschlossen, gelöscht, beendet, etc.. bevor das Programm beendet wird.

Nach einer Diskussion heute morgen Frage ich mich, ob dies der falsche Weg zu schauen, BEGIN-und END-Blöcke.

Was ist die vorgesehene Rolle von einem BEGIN-block in Perl?

Update 1: Gerade herausgefunden, warum das DBI-connect funktionierte nicht. Nach gegeben dieses kleine Perl-Programm:

use strict;
use warnings;

my $x = 12;

BEGIN {
    $x = 14;
}

print "$x\n";

ausgeführt, wenn er druckt 12.

Update 2: Dank an Eric Strom Kommentar unterhalb dieser neuen version macht es deutlich:

use strict;
use warnings;

my $x = 12;
my $y;

BEGIN {
    $x = 14;
    print "x => $x\n";
    $y = 16;
    print "y => $y\n";
}

print "x => $x\n";
print "y => $y\n";

und der Ausgang ist

x => 14
y => 16
x => 12
y => 16

Nochmals vielen Dank Eric!

InformationsquelleAutor der Frage Rob Wells | 2010-10-22

Schreibe einen Kommentar