为什么比较运算符==不适用于perl中的字符串?

时间:2019-07-19 01:17:04

标签: perl

我是Perl的新手。我想了解为什么==运算符会像对待这两个字符串一样?如果我使用eq代替if ==,就可以了。如果名称是kuldeep或rahul,则会显示“正确的名称”。

my $name="kuldeep";

if ($name == "rahul")
{
  print 'Right name!',"\n";
}
else
{
  print 'Wrong name!','\n';
}

2 个答案:

答案 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”进行字符串比较! :-)