gpt4 book ai didi

perl - 在没有外部库的情况下尝试在 Perl 中捕获

转载 作者:行者123 更新时间:2023-12-02 08:33:42 26 4
gpt4 key购买 nike

我正在从 Java 代码生成 Perl 代码并尝试模拟 try catch 机制。我不能使用外部库。我找到了两种可能的方法来模拟这种行为:

第一个:

eval {
...
};
if ($@) {
errorHandler($@);
}

第二个:

unless(.....){
// handle the error
}

我对 Perl 的了解很少。据我了解,第一个解决方案使我能够执行多个命令,而第二个解决方案使我只能执行一个命令。但是,我也看到不推荐使用 eval。

“正确”的做法是什么?

最佳答案

你的第二个片段根本没有捕捉到异常,所以它不是一个选项。您在核心[1] 中的选项是:

  1.  my $rv;
    if (!eval { $rv = f(); 1 } ) {
    warn($@);
    }
  2.  my $rv = eval { f() };
    if ($@) {
    warn($@);
    }

    (第二个版本的)缺点:在 5.14 之前,如果对象析构函数破坏 $@,异常可能不会被注意到。

核心之外,

  1. TryCatch

    use TryCatch;

    try {
    f();
    } catch($e) {
    warn($e);
    }
  2. Nice::Try

    use Nice::Try;

    try {
    f();
    } catch($e) {
    warn($e);
    }
  3. Try::Tiny

    use Try::Tiny;

    my $rv = try {
    f();
    } catch {
    warn($_);
    };

    缺点(Try::Tiny 版本的):这些 block 是伪装的 sub,因此您不能在其中使用 return

可能还有其他的。


  1. 愚蠢的要求。许多有用的工具在核心中不可用,并且在核心中可用的模块不一定是最好的,甚至不一定是推荐的。

关于perl - 在没有外部库的情况下尝试在 Perl 中捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23915134/

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