我正在尝试比较$ num1和$ num2中的前7个字符。当我编译它时,我得到一个奇怪的输出。输出与$ num1或$ num2不匹配。我如何比较这两个变量?
输出:num1 [2739073] num2 [2739074]
$num1 = 012345601;
$num2 = 012345602;
#$num1 =~ s/^0+//;
#$num2 =~ s/^0+//;
if (substr($num1, 0, -2) == substr($num2, 0, -2)) {
print "num1[$num1]" . " num2[$num2]\n";
} else {
print "Not equal\n";
}
答案 0 :(得分:6)
问题#1:
在Perl中,您将字符串与eq
运算符进行比较,而不是==
:
正确的比较是:
if ( substr($num1, 0, 7) eq substr($num2, 0, 7) ) {
# ...
}
else {
# ...
}
问题#2:
以0开头的数字被解释为 octal ,你可以在perldoc perlnumber
12345601 (octal) == 2739073 (decimal)
12345602 (octal) == 2739074 (decimal)
问题#3:
缺少use strict;
和use warnings;
答案 1 :(得分:2)
如上所述,问题在于
my $num1 = 012345601; # Assigns 2739073 (octal 012345601)
my $num2 = 012345602; # Assigns 2739074 (octal 012345601)
应该是
my $num1 = '012345601';
my $num2 = '012345602';
比较除最后两位数之外的所有数字的简单方法是
int($num1/100) == int($num2/100)
答案 2 :(得分:1)
如果你用零开始你的数字,那么Perl将它们解释为八进制数字(基于8),而不是基于10的“常规”数字。
答案 3 :(得分:1)
看起来您希望将数字视为字符串,因此:
$num1 = "012345601";
$num2 = "012345602";
...
等
并且至少要使用eq而不是==,直到你想再次将字符串视为数字。