Perl Eval中的警告

use*_*672 4 perl warnings eval undef

我需要在eval中隐藏警告,但其余代码应该继续发出警告消息.这是我的 -

eval "\$value = $hash->{key}";
Run Code Online (Sandbox Code Playgroud)

现在$ hash的值 - > {key}可以是一个函数调用,如:

$hash->{key} = "function(0.01*$another_var)";
Run Code Online (Sandbox Code Playgroud)

$another_varundef(或"")时出现问题.该脚本只是通过以下消息进行解析 -

参数""在(eval 1381)第1行的乘法(*)中不是数字.

有什么建议我可以避免这个吗?我想的一个选择是解析括号内的值并首先评估它,但它与我正在处理的数据相当复杂.

mob*_*mob 9

将代码包装在一个no warnings块中.

...
{
    no warnings;
    eval "\$value = $hash->{key}";
}
...
Run Code Online (Sandbox Code Playgroud)

您还可以禁用特定类别的警告.请参阅perllexwarn警告类别的层次结构以及perldiag任何特定警告所属的类别.

{
    no warnings qw(uninitialized numeric);
    eval "\$value = $hash->{key}";
}
Run Code Online (Sandbox Code Playgroud)

(blah blah blah标准免责声明,任何一个禁用警告的人都不适合在加入机器的25英尺范围内等等)

  • blah blah blah不要使用字符串形式的eval - 请参阅Perl Best Pract Ch 8.7和http://search.cpan.org/perldoc?Perl::Critic::Policy::BuiltinFunctions::ProhibitStringyEval (4认同)