Пока что все скрипты, приводимые в нашем Учебнике Perl заканчивались, когда по ходу выполнения программа достигала последней строчки в файле.
Однако в некоторых случаях может понадобиться остановить выполнение раньше.
Например, вы спрашиваете пользователя о его возрасте, и если он младше 13, останавливаете скрипт.
use strict;
use warnings;
use 5.010;
print "Каков ваш возраст? ";
my $age = <STDIN>;
if ($age < 13) {
print "Вы слишком молоды\n";
exit;
}
print "Сделаем что-то...\n";
Обычный вызов exit
.
Код выхода
Если вы пользуетесь командной оболочкой Unix/Linux, то вы, должно быть, знаете, что каждая программа
при выходе передает код выхода, который можно узнать из переменной $?
. Вы тоже можете
передать такой код выхода из perl-скрипта, указав параметр при вызове exit()
.
use strict;
use warnings;
use 5.010;
exit 42;
В этом примере мы установили код выхода 42. (По умолчанию устанавливается 0)
Успех или отказ?
В Perl обычно 0 или undef означает отказ, а какое-нибудь истинное значение означает успех.
В мире командной оболочки Unix/Linux, 0 означает успех, а другие числа означают отказ. Как правило, для каждого приложения существует свой набор значений, каждое из которых означает какую-то ошибку.
Проверка кода выхода в Linux
На Unix/Linux обычно запускают скрипт через perl script.pl
, и потом можно проверить код
выхода через echo $?
.
Проверка кода выхода в Perl
Если вам приходится запускать один скрипт perl из другого, например через вызов функции
system, код выхода этой «другой
программы» попадет в переменную Perl'а $?
.
Если вы сохраните код из примера выше в файл script.pl, и создадите другой файл «executor.pl» с таким кодом:
use strict;
use warnings;
use 5.010;
say system "perl script.pl";
say $?;
say $? >> 8;
То вывод будет таким:
10752
10752
42
Вызов system
вернет код выхода, и он же будет записан в переменную Perl'а $?
.
Здесь важно упомянуть, что это значение состоит из двух байт, и собственно код выхода записан в
верхнем байте. Так что, чтобы получить наше 42, нужно сдвинуть биты полученной переменной вправо на
8, использовав побитовый оператор >>
. Это мы и видим в последней строке примера.