gpt4 book ai didi

Perl - 用 eval 混淆 try/catch

转载 作者:行者123 更新时间:2023-12-04 01:53:59 27 4
gpt4 key购买 nike

如何从内部 eval {} 捕获异常?

#!/usr/bin/perl
use strict;
use warnings;

use Try::Tiny;
use Exception::Class ('T');

use Data::Dumper;

try {
eval {
T->throw("Oops");
};
} catch {
print Dumper \$_;
};
}

我们得到的不是 Exception::Class 子模块,而是标量。更准确地说,我有很多带有 require 的遗留代码,并且 require 似乎在内部使用了 eval

最佳答案

您可以按如下方式自动上转换异常:

#!/usr/bin/perl
use strict;
use warnings;
use feature qw( say );

use Try::Tiny;
use Exception::Class ('T');

$SIG{__DIE__} = sub {
die($_[0]) if !defined($^S);
die($_[0]) if ref($_[0]) eq 'T';
T->throw($_[0]);
};

try {
die "foo";
} catch {
say ref($_) || "Not reference";
print $_;
};

try {
T->throw("foo");
} catch {
say ref($_) || "Not reference";
say $_;
};

关于Perl - 用 eval 混淆 try/catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51596162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com