Подтвердить что ты не робот

Как я могу вывести сообщение die() без информации о местоположении?

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

Этот script:

#! /usr/bin/perl -w

use strict;

eval {
    die "My error message";
};
if([email protected]) {
    print [email protected];
}

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

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

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

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

4b9b3361

Ответ 1

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

die "My error message\n"

Это описано в die:

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

Ответ 2

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

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

if( ref [email protected] ) {
    print "Reference message was [email protected]>{message}\n";
    }
else {
    print "[email protected]\n";
    }

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

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

Ответ 3

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