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

ami*_*rds 3 perl

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

我在Perl中使用数组数组(aoa)。aoa中的某些元素是字符串,而有些则是数字。我需要检查元素$ aoa [$ i] [$ j]是否为零。我正在使用此代码。

if($aoa[$i][$j] == '0'){
    next;
}
Run Code Online (Sandbox Code Playgroud)

这会产生大量警告(每个字符元素检查一次-我的数据有几十万个元素要检查),警告“参数不是数字式(==)中的数字”。
我不想看到这些警告。除了在代码中此时专门禁止显示此警告以外,我是否可以进行其他检查以使它在此步骤中不会产生这些警告?

这并不是让我的代码更好地完成我的任务,仅是为了避免收到大量警告,使您认为代码中的某些内容无法正常工作。当您告诉某人时,“哦,不用担心所有这些警告-效果很好”,有些人会不相信您!

Dav*_*oss 6

您可以使用looks_like_number()(来自Scalar :: Util):

use Scalar::Util 'looks_like_number';

if (looks_like_number($aoa[$i][$j]) and $aoa[$i][$j] == '0'){
    next;
}
Run Code Online (Sandbox Code Playgroud)

或类似这样的东西:

# 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;
}
Run Code Online (Sandbox Code Playgroud)