如何在没有位置信息的情况下输出die()消息?

时间:2010-01-07 16:58:02

标签: perl exception-handling

我有一个脚本通过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 个答案:

答案 0 :(得分:49)

\n添加到您的字符串中:

die "My error message\n"

die中记录了这一点:

  

如果LIST的最后一个元素没有   以换行结束,当前脚本   行号和输入行号(如果   任何)也印刷,和换行   提供。

答案 1 :(得分:17)

我在Mastering 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 :(得分:2)

有关所有额外信息,请参阅die的perlfunc条目。并使用\n结束您的邮件。