gpt4 book ai didi

perl - 你在你的 Perl 程序中使用异常类吗?为什么或者为什么不?

转载 作者:行者123 更新时间:2023-12-03 22:37:02 25 4
gpt4 key购买 nike

我有很多关于人们如何在 Perl 中使用异常的问题。我已经包含了一些关于异常(exception)的背景说明,如果您愿意,请跳过此部分,但请花点时间阅读问题并做出回应。

谢谢。

Perl 异常的背景知识

Perl 有一个非常基本的内置异常系统,它为更复杂的使用提供了一个跳板。

例如 die "I ate a bug.\n";使用分配给 $@ 的字符串引发异常.

你也可以抛出一个对象,而不是一个字符串:die BadBug->new('I ate a bug.');
您甚至可以安装信号处理程序来捕获 SIGDIE 伪信号。这是一个将异常作为对象重新抛出的处理程序,如果它们还没有的话。

$SIG{__DIE__} = sub { 
my $e = shift;
$e = ExceptionObject->new( $e ) unless blessed $e;
die $e;
}

这种模式用于许多 CPAN 模块。但是 perlvar 说:

Due to an implementation glitch, the $SIG{DIE} hook is called even inside an eval(). Do not use this to rewrite a pending exception in $@ , or as a bizarre substitute for overriding CORE::GLOBAL::die() . This strange action at a distance may be fixed in a future release so that $SIG{DIE} is only called if your program is about to exit, as was the original intent. Any other use is deprecated.



所以现在我想知道在 sigdie 中客观化异常是否是邪恶的。

问题
  • 你使用异常对象吗?如果是这样,是哪一个?为什么?如果不是,为什么不呢?
  • 如果你不使用异常对象,什么会诱使你使用它们?
  • 如果你确实使用异常对象,你讨厌它们什么,还有什么可以更好?
  • 在 DIE 处理程序中客观化异常是一个坏主意吗?
  • 我应该在哪里客观化我的异常(exception)?在我的 eval{} 包装器中?在 sigdie 处理程序中?
  • 是否有任何关于一般性和 Perl 中的异常的论文、文章或其他资源对您有用或有启发性。

  • 交叉发布于 Perlmonks .

    最佳答案

    我不经常使用异常对象;主要是因为字符串通常就足够了并且涉及的工作更少。这是因为程序通常对异常无能为力。如果它可以避免异常,那么它一开始就不会导致它。

    如果您可以对异常做点什么,请使用对象。如果您只是要终止程序(或某个子集,例如 web 请求),请省去想出一个复杂的对象层次结构的工作,这些对象除了包含一条消息之外什么也不做。

    至于4号; $SIG{__DIE__}永远不应该使用。它不组成;如果一个模块期望 sigdie 以一种方式工作,并且加载了另一个模块使其以其他方式工作,则这些模块不能再在同一个程序中使用。所以不要那样做。

    如果你想使用对象,只需执行非常无聊的 die Object->new( ... ) .它可能不像某处的某种 super 神奇的魔法那样令人兴奋,但它总是有效的,并且代码完全按照它所说的那样做。

    关于perl - 你在你的 Perl 程序中使用异常类吗?为什么或者为什么不?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2439966/

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