是否有一种die
在Perl中以$@
未被修改的方式?据我所知,die
在某些情况下会破坏$@
的内容并“抛出”,在非本地转移控制。我只是想做后者。
当die
是字符串时,如果传递给$@
的异常对象是字符串(或undef),则将文件名和行号附加到die
。
例如,
#!/usr/bin/env perl
# foo.pl
use strict;
use warnings;
use Data::Dumper;
eval { die '1'; };
my $hash_ref = {
msg => $@,
};
print Dumper($hash_ref);
打印:
$VAR1 = {
'msg' => '1 at foo.pl line 7.
'
};
但如果参数不是字符串(或undef),则不会修改它。
#!/usr/bin/env perl
# foo2.pl
use strict;
use warnings;
use Data::Dumper;
eval { die ['string-inside-arrayref']; };
my $hash_ref = {
msg => $@,
};
print Dumper($hash_ref);
此代码段产生:
$VAR1 = {
'msg' => [
'string-inside-arrayref'
]
};
答案 0 :(得分:5)
死亡列表
die
引发了异常。 [...]如果LIST的最后一个元素没有以换行符结尾,则还会打印当前的脚本行号和输入行号(如果有),并提供换行符。
如果您要取消添加文件名和行号,请确保您的错误消息以"\n"
结尾。
要重新抛出现有例外,您只需使用die $@
即可。 $@
是一个异常对象(然后它不会被破坏),或者它是一个以"\n"
结尾的字符串(因为前一个die
将确保添加一个没有人开始)。