Как вывести сообщение die () без информации о местоположении? - PullRequest
30 голосов
/ 07 января 2010

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

Этот скрипт:

#! /usr/bin/perl -w

use strict;

eval {
    die "My error message";
};
if($@) {
    print $@;
}

выходы My error message at d:\src\test.pl line 7.

Я бы предпочел просто получить вывод: My error message

Надеюсь, люди не задумываются о том, почему я хочу это делать, но если кому-то интересно, то:

Как работает мой скрипт, он ищет ввод и отправляет каждый фрагмент ввода в обработчик, если он сталкивается с фрагментом ввода, который он не может обработать, то он генерирует, поэтому все исключения происходят из одного кусок кода. Следовательно, местоположение не очень полезно в этой ситуации.

Ответы [ 3 ]

49 голосов
/ 07 января 2010

Добавьте \n к вашей строке:

die "My error message\n"

Это задокументировано в die :

Если последний элемент LIST не конец в новой строке, текущий скрипт номер строки и номер строки ввода (если любой) также напечатаны, и новая строка поставляется.

17 голосов
/ 07 января 2010

У меня есть глава "Обработка ошибок" в Мастеринг Perl , в которой обсуждается это. Хотя вы можете исключить номер файла и строки, просто завершив свое сообщение новой строкой, вы также можете die со ссылкой:

eval {
    time % 2 ?
        die { 
            message => q(I died!),
            level   => 'really really serious',
            }
        :
        die "I died as a string!\n";
    };

if( ref $@ ) {
    print "Reference message was $@->{message}\n";
    }
else {
    print "$@\n";
    }

Мне не нравятся переводы строк в конце сообщений об ошибках, и хотя я не видел ваш код, это звучит как ситуация, когда я хотел бы добавить дополнительную информацию в исключение, чтобы я мог отследить, что происходит на.

Вы можете также рассмотреть возможность использования одного из многих модулей исключений в CPAN.

2 голосов
/ 07 января 2010

См. Запись perlfunc для die для получения дополнительной информации. И завершите ваше сообщение \n.

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