2

だから私はPerlにあまり慣れていないと言うことから始めましょう. 私はかなりの Perl 作業を必要とする仕事で引き渡されたプロジェクトを持っています。そのほとんどは理にかなっていますが、私は非常に単純な問題に固執しています。

例としてコードを簡略化しました。これを機能させることができれば、プロジェクトの残りの部分を問題なくコーディングできますが、何らかの理由で、次のような単純なものを機能させることができないようです:

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

どんな助けでも大歓迎です!

編集:fyi上記の出力は次のとおりです。

HarryLarryMoe
4

2 に答える 2

11

Perl での文字列比較は ではなく で行われ==ますeq。Perl は、整数を操作するまで、整数13が文字列と異なるとは見なしません'13'明確な方法で数値を表さない文字列値 (例: 'Harry') は、数値 0 に強制されます。したがって、$name=='Harry'常に保持されますが、保持され$name eq 'Harry'ません。

詳細については、perldoc perlopをご覧ください。

追加するために編集:プラグマ を有効にした場合warnings、インタープリターはこれを指摘したでしょう。実際、あなたが書くほとんどすべての Perl コードで、常に良い考えです。特に、このコード (コマンドラインから を介してワンライナーとして実行):use strictuse warningsperl -e

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

foreach my $name(@names)
{
  if($name=="Harry")
  {
    print "$name\n";
  }
}

出力を生成します

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
于 2012-04-11T20:53:44.977 に答える
1

数値比較を使用するため、このようになりますが、文字列 1 ( eq) を使用する必要があります。$name両方を0にHarry評価するため、例では比較は常にtrueになります。

于 2012-04-11T20:56:57.300 に答える