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

cho*_*ida 30 perl exception-handling

我有一个脚本通过引发异常die.当我捕获异常时,我想输出没有附加位置信息的消息.

这个脚本:

#! /usr/bin/perl -w

use strict;

eval {
    die "My error message";
};
if($@) {
    print $@;
}
Run Code Online (Sandbox Code Playgroud)

输出 My error message at d:\src\test.pl line 7.

我宁愿只得到输出: My error message

希望人们不关注为什么我想这样做,但如果有人有兴趣那么:

我的脚本工作的方式,它查找输入并将每个输入调度到处理程序,如果遇到它无法处理然后抛出的输入,所以所有异常都来自同一段代码.因此,在这种情况下,位置并不十分有用.

too*_*lic 49

添加\n到您的字符串:

die "My error message\n"
Run Code Online (Sandbox Code Playgroud)

这在die中记录:

如果LIST的最后一个元素不以换行符结尾,则还会打印当前脚本行号和输入行号(如果有),并提供换行符.

  • 哇,这太模糊了!谢谢 (6认同)

bri*_*foy 17

我在Mastering Perl中有一章讨论"错误处理" .虽然你可以只用一个新行结束你的消息消除了文件和行号,你也可以与参考:

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";
    }
Run Code Online (Sandbox Code Playgroud)

我倾向于不喜欢错误消息末尾的换行符,虽然我没有看到你的代码,但这听起来像是我想要在异常中添加额外信息以便我可以追踪正在发生的事情的情况.

您还可以考虑在CPAN上使用众多Exception模块之一.

  • 谢谢Brian的回答.我不知道能够参考死亡.我可以看到这非常有用. (5认同)