Je sais que le bloc BEGIN est compilé et exécuté avant le corps principal d'un programme Perl. Si vous n'êtes pas sûr de cela, essayez simplement d'exécuter la commande perl -cw sur ceci :
#!/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";
}
On m'a appris que la compilation et l'exécution précoces d'un bloc BEGIN permettent au programmeur de s'assurer que toutes les ressources nécessaires sont disponibles avant l'exécution du programme principal.
J'ai donc utilisé des blocs BEGIN pour m'assurer que des éléments tels que les connexions à la base de données ont été établis et sont disponibles pour être utilisés par le programme principal. De même, j'utilise des blocs END pour m'assurer que toutes les ressources sont fermées, supprimées, terminées, etc. avant que le programme ne se termine.
Après une discussion ce matin, je me demande si ce n'est pas la mauvaise façon de considérer les blocs BEGIN et END.
Quel est le rôle prévu d'un bloc BEGIN en Perl ?
Mise à jour 1 : Je viens de découvrir pourquoi la connexion DBI n'a pas fonctionné. Après avoir reçu ce petit programme Perl :
use strict;
use warnings;
my $x = 12;
BEGIN {
$x = 14;
}
print "$x\n";
lorsqu'il est exécuté, il imprime 12.
Mise à jour 2 : Grâce au commentaire d'Eric Strom ci-dessous, cette nouvelle version est plus claire :
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";
et la sortie est
x => 14
y => 16
x => 12
y => 16
Encore une fois, merci Eric !