Perl Eval 中的警告
我需要在 eval 中隐藏警告,但代码的其余部分应该继续抛出警告消息。这就是我所拥有的 -
eval "\$value = $hash->{key}";
现在 $hash->{key} 的值可能是一个函数调用,例如:
$hash->{key} = "function(0.01*$another_var)";
当 $another_var
为 undef
(或 <代码>“”)。该脚本只是抛出以下消息 -
参数“”不是数字 (eval 1381) 行处的乘法 (*) 1.
有什么建议可以避免这种情况吗? 我想到的一个选择是解析括号内的值并首先对其进行评估,但它对于我正在处理的数据来说非常复杂。
I need to hide warnings within eval but the rest of the code should continue to throw warning messages. Here is what I have -
eval "\$value = $hash->{key}";
now value of $hash->{key} could be a function call, like:
$hash->{key} = "function(0.01*$another_var)";
The problem comes when $another_var
is undef
(or ""
). The script just craps out with the following message -
Argument "" isn't numeric in
multiplication (*) at (eval 1381) line
1.
Any suggestions how I can avoid this?
One option i was thinking was to parse the value inside parenthesis and evaluate that first, but its quite complex with the data I am dealing with.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
将代码包装在
no warnings
块中。您还可以禁用特定类别的警告。请参阅
perllexwarn
了解警告类别的层次结构和perldiag
用于任何特定警告所属的类别。(等等标准免责声明,任何禁用警告的人都不适合进入加法机 25 英尺范围内等等)
Wrap your code in a
no warnings
block.You can also disable specific classes of warnings. See
perllexwarn
for the hierarchy of warning categories andperldiag
for the category that any particular warning belongs to.(blah blah blah standard disclaimer that any one who would disable warnings is unfit to get within 25 feet of an adding machine blah blah)
你确定你不想这样做:
如果你不确定 $href->{foo} 是否是标量、代码引用等,你可以使用 ref() 函数检查它,或者更好,使用 Scalar::Util::reftype()。
Are you sure you wouldn't rather do something like:
If you're not sure whether $href->{foo} is a scalar, code ref, etc, you can check it with the ref() function, or better, with Scalar::Util::reftype().
将哈希键更改为
"function( 0.01 * ($another_var // 0) )"
$another_var // 0
相当于define($another_var) ? $another_var:0
。Change the hash key to be
"function( 0.01 * ($another_var // 0) )"
$another_var // 0
is equivalent todefined($another_var) ? $another_var : 0
.