Как выйти из скрипта 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, использовав побитовый оператор >>. Это мы и видим в последней строке примера.

Published on 2013-10-22