Perl:使用带数组的条件

Joe*_*ton 2 arrays syntax perl conditional loops

所以我开始说我对Perl不太熟悉.我有一个项目,我已经完成了工作,需要相当多的Perl工作.大部分都是有道理的,但我坚持一个非常简单的问题.

我为了示例目的简化了我的代码.如果我可以让它工作,我可以编写项目的其余部分没问题,但由于某种原因,我似乎无法得到像以下一样简单的东西为我工作:

#!/usr/local/bin/perl
@names = ('Harry','Larry','Moe');
foreach $name (@names){
    if($name == 'Harry'){
        print $name;
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏!

编辑:fyi以上输出如下:

HarryLarryMoe
Run Code Online (Sandbox Code Playgroud)

小智 11

Perl中的字符串比较不是用,==而是用eq.在对它们进行操作之前,Perl不会考虑与13字符串不同的整数'13'.不以任何明显方式(例如'Harry')表示数字的字符串值被强制为零的数值.因此,$name=='Harry'将永远持有,但$name eq 'Harry'不会.

请查看perldoc perlop更多信息.

编辑添加: 如果您启用了warnings编译指示,那么解释器会指出这一点.事实上,它是总是一个好主意,use strictuse warnings在几乎你写任何Perl代码.特别是,这段代码(从命令行通过一行执行perl -e):

use strict;
use warnings;
my @names=("Harry","Larry","Moe");

foreach my $name(@names)
{
  if($name=="Harry")
  {
    print "$name\n";
  }
}
Run Code Online (Sandbox Code Playgroud)

产生输出

Argument "Harry" isn't numeric in numeric eq (==) at -e line 7.
Argument "Harry" isn't numeric in numeric eq (==) at -e line 7.
Harry
Argument "Larry" isn't numeric in numeric eq (==) at -e line 7.
Larry
Argument "Moe" isn't numeric in numeric eq (==) at -e line 7.
Moe
Run Code Online (Sandbox Code Playgroud)