我有一个API,我想改变它的行为。我最初制作方法is_success
意味着“绿灯”,但“红灯”并不例外,它仍然意味着灯光正常工作。我现在希望is_success
仅在出现建议时为假,并添加了is_green
和is_red
(注意:还有“黄色”和“紫色”状态)我的API用于补充特定的检查(目前黄色和紫色抛出异常,但稍后可能会进行状态检查)。
有什么好的方法可以从代码中发出行为正在改变的警告吗?还是变了?如果用户知道,允许关闭这些警告? (注意:已经在更改日志中添加了弃用通知)
答案 0 :(得分: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);
}
答案 1 :(得分:1)
是的,您可以使用warn命令。它会显示警告,但也可以通过为$ 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。
答案 2 :(得分:1)
我总是发现MIME::Head使用的方法很有用且很有趣。
此方法已被弃用。有完整的原因,请参阅MIME :: Parser中的“decode_headers”。如果你绝对必须使用它并且不喜欢警告,那么提供一个FORCE:
“I_NEED_TO_FIX_THIS” 闭嘴,做到这一点。不建议。 仅供那些需要保持旧脚本运行的人使用。
“I_KNOW_WHAT_I_AM_DOING” 闭嘴,做到这一点。不建议。 为那些真正知道自己在做什么的人提供。
这个想法是只能通过提供一个魔术参数来抑制弃用警告,该参数记录了警告被抑制的原因。