【发布时间】:2018-04-30 05:55:09
【问题描述】:
在 Perl 中是否有一种dieing 的方式使得$@ 不会被修改?据我所知,die 在某些情况下会破坏$@ 的内容并“抛出”,将控制权转移到非本地。我只想做后者。
当die 是字符串时,当传递给die 的异常对象是字符串(或undef)时,将文件名和行号附加到$@。
例如,
#!/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);
这个 sn-p 产生:
$VAR1 = {
'msg' => [
'string-inside-arrayref'
]
};
【问题讨论】:
-
您自己发出
die吗?要禁止行/文件信息,请添加换行符die "$string\n";。否则你可以为它设置一个钩子,$SIG{__DIE__} = sub { ...},并在里面随意格式化。见%SIG in perlvar
标签: perl