2012-04-11 7 views
2

だから私はPerlにあまり慣れていないと言って始めます。私はかなりのPerl作業を必要とする仕事で私が手渡されたプロジェクトを持っています。そのほとんどは理にかなっていますが、私は非常に単純な問題に取り組んでいます。Perl:配列で条件付きを使用する

私は例の目的でコードを簡略化しました。私はこの仕事を得ることができれば、私は、プロジェクトの残りの部分には問題をコーディングすることはできませんが、いくつかの理由のために私は私のために働くために、次のような単純な何かを得るように見えることはできません。

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

すべてのヘルプです非常に感謝!

編集:Perlで

HarryLarryMoe 

答えて

11

文字列比較==ではなくeqで行われていません。上記のFYI出力は次のようです。 Perlは、あなたがそれらを操作するまで、文字列'13'とは異なる整数13を考慮しません。 String values that don't represent numbers in any obvious way (e.g. 'Harry') are coerced to a numeric value of zero。したがって、$name=='Harry'は常に保持されますが、$name eq 'Harry'は保持されません。

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

warningsプラグマを有効にしていた場合、インタープリタがこれを指摘しているはずです。実際には、常にと書いたPerlコードは、use strictuse warningsになるとよいでしょう。具体的には、このコードは(perl -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 
+1

優秀な説明。どうもありがとうございます!厳しいと警告のヒントをありがとう。挑戦的に追加して使用を開始します。 –

+0

@JoeBurton - あなたは大歓迎です。私はまた、[Learning Perl](http://www.amazon.com/Learning-Perl-Randal-L-Schwartz/dp/1449303587)、[Perlプログラミング](http: //www.amazon.com/Programming-Perl-Unmatched-processing-scripting/dp/0596004923/ref=sr_1_1?s=books&ie=UTF8&qid=1334179061&sr=1-1)および/または[Modern Perl](http:// onyxneon .com/books/modern_perl /)(後者は無料です)。 –

+0

「反抗的に」?一口。 – AmbroseChapel

1

を生成します(eq)。 $nameHarryは両方とも0に評価されるため、あなたの比較はあなたの例に常に当てはまります。

関連する問題