Почему код выхода 1 после успешного запуска сценария Perl?

Когда я пытаюсь запустить свои Perl-скрипты, он выполняется успешно. Позже, когда я запускаю эту команду echo %errorlevel%, это дает мне вывод как 1. Почему?

2 ответа

Если Perl вернулся с уровнем ошибки 1, то либо exit(1) назывался

>perl -e"exit 1"
>echo %errorlevel%
1

или же $? был установлен на 1 в END обработчик

>perl -e"END { $? = 1; }"
>echo %errorlevel%
1

или программа умерла, когда $! было 1

>perl -e"$!=1; die;"
Died at -e line 1.
>echo %errorlevel%
1

(Это часто указывает на сбой системного вызова с "Операция не разрешена")

>perl -E"say $!=1"
Operation not permitted

или программа умерла, когда $! было 0 а также $? было (1 << 8),

>perl -e"$!=0; $?=1<<8; die;"
Died at -e line 1.
>echo %errorlevel%
1

Я полагаю, это возможно для perl выйти с 1 при других обстоятельствах (например, проблемы с загрузкой perl сам), но я не знаю таких обстоятельств.

Что-то, о чем следует знать, вы должны немедленно опросить%ERRORLEVEL%. Каждый шаг в пакетном скрипте будет устанавливать или нарушать уровень ошибки, поэтому, если вы ожидаете, что он останется, он не будет. Например, если вы запускаете скрипт, затем запускаете другую команду (dir или echo и т. Д.) И затем проверяете уровень ошибки, это будет для команды ПОСЛЕ скрипта, а не для самого скрипта.

Другие вопросы по тегам