0

我有一个 API,我想改变它的行为。我原来的方法is_success是指“绿灯”,但“红灯”也不例外,它仍然意味着灯工作正常。我现在is_success只想在有建议的情况下是假的,并且在我的 API 中添加了is_greenis_red(注意:还有状态“黄色”和“紫色”)以补充特定检查(目前黄色和紫色抛出异常,但是以后可能会得到状态检查)。

有什么好的方法可以让我从代码中发出行为正在改变的警告吗?还是变了?同时允许在用户知道的情况下关闭这些警告?(注:已经在变更日志中放了弃用通知)

4

3 回答 3

2

您可以使用 Perl 的词法警告类别。有一个deprecated类别,或者您可以将包/模块注册为警告类别。

{
    package My::Foo;
    use warnings;

    sub method {
        (@_ <= 2) or warnings::warnif('deprecated', 'invoking ->method with ... ')
    }
}

{
    package My::Bar;
    use warnings;
    use warnings::register;

    sub method {
        (@_ <= 2) or warnings::warnif('invoking ->method with ... ')
    }
}

{
    use warnings;
    My::Foo->method(1);
    My::Foo->method(1, 2);
    My::Bar->method(1, 2);
}

{
    no warnings 'deprecated';
    My::Foo->method(1, 2);
    no warnings 'My::Bar';
    My::Bar->method(1, 2);
}

查看警告perllexwarn

于 2012-10-05T22:30:41.377 回答
1

是的,您可以使用警告命令。它将显示警告,但也可以通过为 $SIG{' WARN '}指定一个空子来捕获它们,这将阻止消息显示。

# warnings are thrown out with this BEGIN block in your code.
BEGIN {
  $SIG{'__WARN__'} = sub {  }
}

# prints the warning to STDOUT, if $SIG{'__WARN__'} is set to the default
warn "uh oh, this is deprecated!";

有关更多信息和其他示例,请参见 perdocs,http ://perldoc.perl.org/functions/warn.html和http://perldoc.perl.org/perllexwarn.html

于 2012-10-05T05:15:21.537 回答
1

我一直觉得MIME::Head使用的方法有用且有趣。

此方法已被弃用。完整原因请参见 MIME::Parser 中的“decode_headers”。如果您绝对必须使用它并且不喜欢该警告,请提供 FORCE:

“I_NEED_TO_FIX_THIS” 闭嘴做吧。不建议。仅提供给那些需要保持旧脚本正常运行的人。

“I_KNOW_WHAT_I_AM_DOING” 闭嘴做吧。不建议。提供给那些真正知道自己在做什么的人。

这个想法是,只能通过提供一个神奇的参数来抑制弃用警告,该参数记录了警告被抑制的原因。

于 2012-10-05T14:47:04.873 回答