Perl 即使某些元素是字符串,在检查数组中元素的数值等效性是否为零时,如何避免出现警告?

Perl 即使某些元素是字符串,在检查数组中元素的数值等效性是否为零时,如何避免出现警告?,perl,Perl,在检查包含字符串元素和数字元素的数组中的数字零时,我不希望得到警告,即所检查的值在数字等式(=)中不是数字 我正在使用Perl中的数组数组(aoa)。aoa中的一些元素是字符串,一些是数字。我需要检查元素$aoa[$I][$j]是否为零。我正在使用这个代码 if($aoa[$i][$j] == '0'){ next; } 这会产生大量警告(对字符元素的每次检查一个-我的数据有几十万个元素要检查),表明“参数在数值等式(=)中不是数值的”。 我不想看到这些警告。除了在我的代码中的这一点上

在检查包含字符串元素和数字元素的数组中的数字零时,我不希望得到警告,即所检查的值在数字等式(=)中不是数字

我正在使用Perl中的数组数组(aoa)。aoa中的一些元素是字符串,一些是数字。我需要检查元素$aoa[$I][$j]是否为零。我正在使用这个代码

if($aoa[$i][$j] == '0'){
    next;
}
这会产生大量警告(对字符元素的每次检查一个-我的数据有几十万个元素要检查),表明“参数在数值等式(=)中不是数值的”。
我不想看到这些警告。除了在我的代码中的这一点上明确禁止此警告外,我是否可以以任何不同的方式执行检查,以使其在此步骤中不会产生这些警告


这并不是为了让我的代码更好地完成我的任务,而是为了停止收到大量的警告,这些警告会让你认为代码中的某些东西工作不正常。当你告诉某人,“哦,不要担心那些警告——它很好用”时,有些人往往不相信你

您可以使用
looks\u like\u number()
(from):

或者像这样:

# If the value has a length and is false, then it
# must be 0 or 0.0.
if (length($aoa[$i][$j]) and ! $aoa[$i][$j]) {
    next;
}

和往常一样,有几种方法可以做到这一点。如果没有任何元素是
undef
,则可以测试错误性和
ne'
,如
If(!$x&&$xne'){}
(使用$x表示简洁)。这不会捕获某些零的表达式,例如“0E0”或“0但为真”。如果这些对您很重要,那么另一种方法是使用标准
Scalar::Util
模块中的
looks\u like\u number()
函数。这样你就可以说
如果(看起来像数字($x)&&$x==0){}
而不用担心警告。如果您确定零是标准形式的,您也可以简单地说
if($x eq'0'){}
,因为它可以对数字进行字符串比较(但反之亦然)


顺便说一句,希望消除警告对您很好。

您尝试过字符串比较吗?@HåkonHægland是的,我尝试过字符串比较(eq)。不幸的是,它没有捕获零值。我想知道
int('0.0')eq'0'
是否与此相关。但是要小心使用
int(unde)
int(\z)
。您也可以使用
无警告“数值”。我将此答案标记为可接受的答案,只是因为考虑到“类型”为零。我认为这个答案和@Dave Cross的答案都是完美的答案。我最终使用了Scalar::Util looks_like_number()版本,它非常适合我。非常感谢。我希望我能把两个答案标为“正确”。
# If the value has a length and is false, then it
# must be 0 or 0.0.
if (length($aoa[$i][$j]) and ! $aoa[$i][$j]) {
    next;
}