代码之家  ›  专栏  ›  技术社区  ›  ennuikiller

在Perl中处理异常的最佳方法是什么?

  •  25
  • ennuikiller  · 技术社区  · 14 年前

    我注意到Exception.pm和Error.pm在Perl社区中似乎没有广泛使用。是不是因为 eval

    此外,Perl程序在异常处理方面似乎有一个更为宽松的策略。这有什么令人信服的原因吗?

    在任何情况下,Perl中处理异常的最佳方法是什么?

    2 回复  |  直到 11 年前
        1
  •  52
  •   Ether    7 年前

    Perl社区的共识似乎是 Try::Tiny 是进行异常处理的首选方法。您所指的“宽大政策”可能是由以下几种因素共同造成的:

    • 你不能避免处理例外情况。)
    • 许多Perl开发人员的背景知识。(像C这样的语言 1个 而shell没有
    • 人们倾向于使用Perl执行的任务类型。(文本咀嚼和 不需要异常处理的报表生成。)
    • Perl没有(好的)内置异常机制。

    注意,最后一项意味着您将看到很多这样的代码:

    eval { something() };
    if ($@) {
        warn "Oh no! [$@]\n";
    }
    

    一。C确实有 setjmp() longjmp()

        2
  •  1
  •   user10922431 user10922431    6 年前

    永远不要按原样测试$@因为它是全局变量,所以即使测试本身也可以更改它。

    通用评估模板:

    my $result;
    
    eval {
        $result= something();
        # ...
        1;  # ok
    } or do {
        my $eval_error= $@ || "error";
        # ...
        die $eval_error;
    };  # needs a semicolon
    

    实际上这是最轻松的方式。它仍然给我留下了一个小小的空间,让我可以做出有趣的$@行为,但没有什么真正让我感到足够的担心。