我是Perl的新手。我想了解为什么==运算符会像对待这两个字符串一样?如果我使用eq代替if ==,就可以了。如果名称是kuldeep或rahul,则会显示“正确的名称”。
my $name="kuldeep";
if ($name == "rahul")
{
print 'Right name!',"\n";
}
else
{
print 'Wrong name!','\n';
}
答案 0 :(得分:11)
您误会了。数值相等比较运算符与字符串完美配合!
$ perl -e'CORE::say "123" == "123.0" ? "same" : "different"'
same
$ perl -e'CORE::say "123" == "123.1" ? "same" : "different"'
different
在您的示例中,您要让Perl比较字符串kuldeep
(带有警告的零)的数值和字符串rahul
(带有警告的零)的数值,并且他们确实是平等的。
始终使用use strict; use warnings;
!!!
然后使用eq
比较字符串。
答案 1 :(得分:4)
解释器(通过==运算符)意识到它正在进行数字比较。 $ name的值将转换为数字,从而得到0。“ rahul”将转换为数字,即0。0== 0,这是正确的,因此选择了“ Right name”。 / p>
如果我将其与我的名字进行比较,则其工作方式相同。
但是,如果其中确实有一个带数字的字符串,例如您将两个字符串都设为“ 12345”(特别是带引号),Perl就会通过请求==运算符来假定您知道自己在做什么,并且会会自动将其转换(用程序员所说的“广播”)为数字12345。然后您的比较将失败。
TL / DR:使用“ eq”进行字符串比较! :-)