Perl встроен в выход и печать одной командой - PullRequest
13 голосов
/ 21 февраля 2011

Я знаю, что могу умереть, но это печатает имя сценария и номер строки.

Мне нравится делать такие вещи, как die 'error' if $problem;

Есть ли способ сделать это без печати строкичисловой материал?

Было бы неплохо не использовать фигурные скобки if($problem){print 'error';exit}

Ответы [ 5 ]

23 голосов
/ 21 февраля 2011

Добавление новой строки к сообщению об ошибке die подавляет добавленный номер строки / имя сценария verbage:

die "Error\n"
19 голосов
/ 21 февраля 2011

Вы можете добавить новую строку к строке die, чтобы Perl не добавил номер строки и имя файла:

die "oh no!\n" if condition;

Или написать функцию:

sub bail_out {print @_, "\n"; exit}

bail_out 'oh no!' if condition;

Также имейте в виду, что die печатает в stderr, в то время как print по умолчанию принимает стандартный вывод.

12 голосов
/ 22 февраля 2011

Вы можете использовать довольно естественное звучание:

print "I'm going to exit now!\n" and exit if $condition;

Если у вас есть Perl 5.10 или выше и добавьте, например, use 5.010; в начало вашего скрипта, вы также можете использовать say,не добавляйте новую строку самостоятельно:

say "I'm going to exit now!" and exit if $condition;
1 голос
/ 25 февраля 2011

Вот ответ на вопрос, который вы ответили в комментарии Эрику.

Для выполнения обоих операций (печать STDOUT и печать без номера строки) вы все равно можете использовать die, изменив обработчик __DIE__:

$SIG{__DIE__} = sub { print @_, "\n"; exit 255 };

die "error" if $problem;
0 голосов
/ 21 февраля 2011

Вы можете создавать сложные сообщения с помощью sprintf:

die sprintf( ... ) if $problem;
...