Perl使用字符串死亡,但不附加文件名和行号

Perl使用字符串死亡,但不附加文件名和行号,perl,Perl,在Perl中,有没有一种方法可以使$@不被修改?据我所知,在某些情况下,die会破坏$@的内容,并抛出,将控制权转移到非本地。我只想做后者 当die为字符串时,当传递给die的exceptionish对象为字符串或未定义时,将文件名和行号追加到$@中 比如说, #!/usr/bin/env perl # foo.pl use strict; use warnings; use Data::Dumper; eval { die '1'; }; my $hash_ref = { msg =

在Perl中,有没有一种方法可以使$@不被修改?据我所知,在某些情况下,die会破坏$@的内容,并抛出,将控制权转移到非本地。我只想做后者

当die为字符串时,当传递给die的exceptionish对象为字符串或未定义时,将文件名和行号追加到$@中

比如说,

#!/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.
'
        };
但是,如果参数不是字符串或未定义,则不会对其进行修改

#!/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'
                   ]
        };
:

模具清单

死亡引发了一个例外。[……]

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

如果要禁止添加文件名和行号,请确保错误消息以\n结尾

要重新显示现有异常,只需使用die$@。$@是一个异常对象,那么它无论如何不会被损坏,或者它是一个以\n结尾的字符串,因为如果没有一个异常对象,上一个骰子将确保添加一个异常对象。

:

模具清单

死亡引发了一个例外。[……]

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

如果要禁止添加文件名和行号,请确保错误消息以\n结尾


要重新显示现有异常,只需使用die$@。$@是一个异常对象,那么它无论如何都不会被损坏,或者它是一个以\n结尾的字符串,因为如果没有一个可以开始的骰子,则上一个骰子将确保添加一个。

您自己发行骰子吗?若要抑制行/文件信息,请添加换行符,$string\n;。否则,您可以为它设置一个钩子,$SIG{{{uuuu DIE}=sub{…},并根据需要在内部格式化它。看到了吗?你自己也在发骰子吗?若要抑制行/文件信息,请添加换行符,$string\n;。否则,您可以为它设置一个钩子,$SIG{{{uuuu DIE}=sub{…},并根据需要在内部格式化它。请看,这对于用户代码来说似乎很好,但我正在尝试编写一个库来捕获、检查并可能重新引用异常。我希望能够准确地重新显示我收到的异常,即使异常对象在XS模块中被设置为非换行符分隔的字符串或类似的东西。这对于用户代码来说似乎很好,但我正在尝试编写一个库来捕获、检查并可能重新显示异常。我希望能够准确地重新显示我收到的异常,即使异常对象已在XS模块或类似模块中设置为非换行分隔字符串。