我正在阅读包含数千行的文件。
我正在逐行阅读文件。
在我读完该行之后,使用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。
那么如何为此编写程序?
答案 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.";
}