Как прервать программу на Perl - выйти или умереть? - PullRequest
31 голосов
/ 30 августа 2010

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

Между:

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

и

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

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

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

Ответы [ 3 ]

35 голосов
/ 30 августа 2010

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

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

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

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

22 голосов
/ 30 августа 2010

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

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

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

6 голосов
/ 30 августа 2010

Лучше всего следовать существующей практике («правило наименьшего удивления»): выйти с 2 при фатальной ошибке, такой как синтаксическая ошибка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...