Perl построен в выводе и распечатывается одной командой
Я знаю, что могу умереть, но печатает имя и номер script.
Мне нравится делать что-то вроде die 'error' if $problem;
Есть ли способ сделать это без печати номера строки?
Было бы неплохо не использовать фигурные скобки if($problem){print 'error';exit}
Ответы
Ответ 1
Вы можете использовать довольно естественное звучание:
print "I'm going to exit now!\n" and exit if $condition;
Если у вас есть perl 5.10 или выше и добавьте, например, use 5.010;
в верхней части вашего script, вы также можете использовать say
, чтобы избежать необходимости добавлять новую строку самостоятельно:
say "I'm going to exit now!" and exit if $condition;
Ответ 2
Добавление новой строки в сообщение die подавляет добавленный номер строки/имя скрипта:
die "Error\n"
Ответ 3
Вы можете добавить новую строку в строку штампа, чтобы предотвратить добавление номера строки и имени файла perl:
die "oh no!\n" if condition;
Или напишите функцию:
sub bail_out {print @_, "\n"; exit}
bail_out 'oh no!' if condition;
Также имейте в виду, что die
печатает на stderr, а print
по умолчанию - на stdout.
Ответ 4
Вот ответ на вопрос, который вы завершили в своем комментарии к Эрику.
Для выполнения обоих (печать STDOUT и печати без номера строки) вы все равно можете использовать die
, изменив обработчик __DIE__
:
$SIG{__DIE__} = sub { print @_, "\n"; exit 255 };
die "error" if $problem;
Ответ 5
Вы можете создавать сложные сообщения с помощью sprintf
:
die sprintf( ... ) if $problem;