В /bin/sh
и /bin/bash
(и я предполагаю, что многие другие оболочки), начиная сценарии с #!/bin/sh -e
(или выполнение set -e
где-нибудь в сценарии) приведет к прерыванию сценария, когда любая командная строка внутри сценария завершится с кодом состояния, отличным от 0.
Есть ли какой-либо эквивалент или обходной путь для получения такого же поведения в сценарии Perl? (т.е. если какая-либо инструкция вызывает ошибку или если какая-либо внешняя команда выполняется с system(...)
или обратные кавычки возвращают код ошибки, затем немедленно выйдите)
Посмотрите на автодай основной модуль. Это заменяет такие звонки, как open
и fork
с функциями, которые умирают при сбое. Чтобы заставить его работать с system
, вам нужно импортировать :all
или :system
, поскольку по умолчанию этого не происходит.
use strict; #always!
use warnings; #always!
use autodie qw(:system);
system('/bin/false'); #This will die
print "This will never be printed\n";
Важно отметить, что для autodie
работать с system
вам нужен IPC::System::Simple
модуль. Установите его с помощью CPAN или на Ubuntu вы можете sudo apt-get install libipc-system-simple-perl
.