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;