perl中数字和阿尔法数的相等运算符

perl中数字和阿尔法数的相等运算符,perl,operators,Perl,Operators,我正在读一个包含数千行的文件。 我正在逐行阅读文件。 在我读了这行代码之后,我使用substr为2个变量获取2个值,如下所示 $val1 = substr($line,15,3); $val2 = substr($line,18,3); 现在我想检查这两个值是否相等$val1可以是一个数字(如233),也可以是字母数字(如V23),每行不同。我既不能使用==运算符,也不能使用eq运算符。请给我一个解决这个问题的建议 请说明下面的例子。 在阅读第一行val1=235和val2=236之后,这里如

我正在读一个包含数千行的文件。 我正在逐行阅读文件。 在我读了这行代码之后,我使用
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

那么如何为此编写程序呢?

可能的解决方案

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.";
}

为什么不能使用
eq
?如果
eq
的一个操作数是一个数字,Perl将强制它为一个字符串。为了澄清,
2.0
应该等于
2
?(字符
2
后跟两个空格)您暗示您对equal的定义不同于
=
eq
,但您没有指定它是什么。这个问题缺少一个关键组成部分!这是一个学术练习吗?在现实世界中,你会用“eq”来表示。如果是学术性的,您可以实现您的wown字符串比较函数。。。