2011-02-03 13 views
3

ちょうどPerlを学び始めました。つまり、プログラムの流れを学びました。文字列と数値を評価し、適切な演算子を使用することの主な相違点を学びました。シンプルなスクリプトは、私はここで、それはスーパーシンプルなので、私は狂った運転している "マイク"に入力されている必要があります実行され、動作しないステートメント。代わりにelse文を出力します。私の文字列入力でeqが動作しないのはなぜですか?

#!C:\strawberry\perl\bin\perl.exe 

use strict; 
#use warnings; 
#use diagnostics; 

print("What is your name please?"); 
$userName = <STDIN>; 


if($userName eq "mike"){ 
    print("correct answer"); 
} 
else{ 
    print("Wrong answer"); 
} 
+3

プログラムのデバッグを試しましたか? $ userNameの値は何ですか? – BlackBear

+0

$ userNameの値は、を使用してスカラー変数としてユーザーが入力した値になります。 –

+1

右。しかし、ユーザーが入力した改行文字も含まれています。あなたの比較はそれを考慮に入れません。 –

答えて

1

私はあなたの質問を読んでいたので、文字列と同等の数値との間に問題があると思っていました。以下のケースを考えてみてください。

#!/usr/bin/env perl 

use strict; 
use warnings; 

print("What is the meaning of life, the universe and everything? "); 
chomp(my $response = <STDIN>); 

if ($response == 42) { 
#if (42 ~~ $response) { 
    print "correct answer\n"; 
} else { 
    print "Wrong answer\n" ; 
} 

ifステートメントを試してみてください。 familyのような素敵なものに答え、何が起こるかを見てください。 ~~はPerlでこの問題の一部を助けたスマートマッチ演算子です。詳細はhere(詳細は「スマートマッチング」を参照)をご覧ください。 chomp演算子のインライン使用にも注意してください。

+0

優秀!多くのおかげで、ジョエル。私は今それを読んでいる! –

11

てみてくださいあなたはSTDINからあなたの価値を取得した後、ムシャムシャ食べるために呼び出しを追加助けてください:

$userName = <STDIN>; 
chomp($userName); 

STDINから読み取った値が、最後に改行文字を持つことになりますので。 chomp()ビルトインは、文字列の最後から改行を削除します。

+2

*私は理由を想像することができます。しかし、これらの "試したコードを試してください"という答えは特に役に立ちません。理由を理解できない場合でも、正しい解決策でさえ依然としてカーゴカルトです。 – delnan

+1

私はもっと詳しい説明を編集していたのですが、それを書き留めました。悪い習慣、申し訳ありません(おそらく、誰かが私の長い答えを書いている間に何か短いことを書いている回数のためです) –

+0

ありがとうFd !.もちろん - STDINは\ n文字で終わりを付けますね。多くのおかげで、あなたは正しかったです。私はそれを覚えておく必要があり、私は同時にそれを学び、それについてすべてを忘れてしまったので、自分自身を蹴っています! –

関連する問題