Подтвердить что ты не робот

Как завершить программу на Perl - выйти или умереть?

Я использую проверку синтаксиса, чтобы проверить, используется ли мой Perl script правильным образом. Если синтаксис неверен, я показываю сообщение о правильности синтаксиса, а затем завершаю выполнение программы.

Между:

print "Please use the following syntax: ...";
exit 1;

и

die("Please use the following syntax: ...");

Какой я должен использовать? Я знаю, что die был бы ответом на обработку исключений, но это не так.

Какой из них лучший выбор для завершения программы без обработки исключений? Пожалуйста, также скажите, почему.

4b9b3361

Ответ 1

Это зависит от того, что вы хотите сделать с STDERR и STDOUT. Я предпочитаю отправлять сообщения об ошибках и предупреждения в STDERR, так что когда кто-то пытается перенаправить вывод в файл, они все еще видят сообщения об ошибках; Тем не менее, бывают случаи, когда STDOUT используется для передачи статуса пользователю, чтобы он мог tail -f или разбивать на страницы, и в это время запись в STDERR вызывает у них боль (они должны перенаправить STDERR обратно в STDOUT с помощью 2>&1, и не все знают, как это сделать). Поэтому для использования die или print и exit в значительной степени зависит от того, какую программу вы пишете.

Существуют и другие преимущества/недостатки использования die:

  • Вы можете уловить die с помощью eval, но не выйти
  • Вы можете запустить код, когда программа вызывает die, установив обработчик сигнала __DIE__
  • Вы можете легко переопределить функцию die

У каждого из них есть моменты, когда это удобно, чтобы иметь возможность делать это, и времена, когда это боль, которую они могут сделать.

Ответ 2

print печатает до STDOUT, но die печатает на STDERR

exit 1 выходит с статусом выхода 1, но die выходит с текущим значением выхода errno, которое $!

Следовательно, die является предпочтительным способом как его более простым и коротким.