Я знаю, что блок BEGIN компилируется и выполняется перед основным телом программы Perl. Если вы не уверены в этом, просто попробуйте запустить команду perl -cw над этим:
#!/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";
}
Мне говорили, что ранняя компиляция и выполнение блока BEGIN позволяет программисту обеспечить доступность любых необходимых ресурсов до того, как будет запущена основная программа.
И поэтому я использовал блоки BEGIN, чтобы убедиться, что такие вещи, как соединения с БД, установлены и доступны для использования основной программой. Аналогично, я использую блоки END, чтобы гарантировать, что все ресурсы будут закрыты, удалены, завершены и т.д. До того, как программа завершится.
После обсуждения сегодня утром мне интересно, не так ли это, чтобы посмотреть блоки BEGIN и END.
Какова предполагаемая роль блока BEGIN в Perl?
Обновление 1: Просто выяснили, почему соединение DBI не работает. После получения этой маленькой программы Perl:
use strict;
use warnings;
my $x = 12;
BEGIN {
$x = 14;
}
print "$x\n";
при выполнении он печатает 12.
Обновление 2: Благодаря комментарию Эрика Стром ниже этой новой версии становится понятнее:
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";
а выход -
x => 14
y => 16
x => 12
y => 16
Еще раз спасибо Eric!