perl中数字和字母数字的等号运算符

时间:2016-06-24 15:21:21

标签: perl operators

我正在阅读包含数千行的文件。 我正在逐行阅读文件。 在我读完该行之后,使用substr我为2个变量获取2个值,如下所示。

$val1 = substr($line,15,3);
$val2 = substr($line,18,3);

现在我想检查这两个值是否相等。 $val1可以只是一个数字(如233),也可以是字母数字(如V23),因行而异。我既不能使用==运算符也不能使用eq运算符。请给我一个如何解决这个问题的建议。

为清楚起见,请考虑以下示例。   在读取第一行val1 = 235和val2 = 236之后。如果我使用eq它返回true我将不得不使用==。   在读取第二行val1 = v26和val2 = v26之后。在这里我不能使用==因为它是alphanumric。我需要使用eq。

那么如何为此编写程序?

1 个答案:

答案 0 :(得分:1)

可能的解决方案......

use strict;
use warnings;
use Scalar::Util qw(looks_like_number);

my $val1 = '233';
my $val2 = 'V23';

if ( looks_like_number($val1) && looks_like_number($val2) )
{
    print "both values are numbers.";
    if ( $val1 == $val2 )
    {
        print "numeric values are equivalent.";
    }else{
        print "numeric values are not equivalent.";
    }
}
elsif ( !looks_like_number($val1) && !looks_like_number($val2) )
{
    print "both values are strings.";
    if ( $val1 eq $val2 )
    {
        print "string values are equivalent.";
    }else{
        print "string values are not equivalent.";
    }
}
else
{
    print "the variables are not of the same type.";
}