有时我想通过在某处输出它来处理末尾带有“at File.pm line 123”的 Perl 字符串异常。但是,我真的不想用路径名、行号等公开最后一位。
随着时间的推移,我提出了几种可能的解决方案,但我都不太喜欢它们。仅使用这样的正则表达式是一个显而易见的表达式:
s/\s+ at \s+ .*$//xms;
但问题是它会杀死任何带有“at”字样的东西。将行号设为非可选会有所帮助,但最终您会得到具有“at ANON”的匿名代码或类似的怪诞代码。
我什至尝试过这样的事情:
$_ = reverse $_;
s/^.*? \s+ ta \s+//xms;
$_ = reverse $_;
这对单行错误非常有效。但是,如果您最终得到来自confess
或其他异常抛出器的完整堆栈跟踪,那么您最终会得到长堆栈跟踪。
有人愿意分享一个好的解决方案吗?或者更好的方法的建议?(“不要像那样输出 die 消息”不是可接受的答案。)
如果有一个我忽略的 CPAN 模块在这里提供帮助,我很想知道。如果没有,我正在考虑为此目的贡献一个 CPAN 模块。