82

私 (完全な Perl 初心者) は、ifステートメントで文字列比較を行っています。

私が次のことをした場合:

if ($str1 == "taste" && $str2 == "waste") { }

正しい結果が表示されます (つまり、条件が一致する場合、"then" ブロックが評価されます)。しかし、次の警告が表示されます。

行番号 x の数値式 (==) で、引数 "taste" が数値ではありません。
引数 "waste" は、行番号 x の数値 eq (==) で数値ではありません。

しかし、もしそうなら:

if ($str1 eq "taste" && $str2 eq "waste") { }

if 条件が満たされても、then ブロックは評価されません。

ここで$str1taste、 と$str2ですwaste

これを修正するにはどうすればよいですか?

4

4 に答える 4

112

まず、eqは文字列を比較するためのものです。==は数値を比較するためのものです。

「if」条件が満たされても、「then」ブロックは評価されません。

あなたの問題は、変数にあなたが思っていることが含まれていないことだと思います。あなたの$str1or$str2には「味\n」などのようなものが含まれていると思います。if :の前に印刷して確認してくださいprint "str1='$str1'\n";

末尾の改行は関数で削除できますchomp($str1);

于 2012-12-26T21:54:09.233 に答える
32

==数値比較を行います。両方の引数を数値に変換してから比較します。$str1と両方が数値として 0 に評価される限り$str2、条件は満たされます。

eq文字列比較を行います: 条件が満たされるためには、2 つの引数が字句的に (大文字と小文字を区別して) 一致する必要があります。

"foo" == "bar";   # True, both strings evaluate to 0.
"foo" eq "bar";   # False, the strings are not equivalent.
"Foo" eq "foo";   # False, the F characters are different cases.
"foo" eq "foo";   # True, both strings match exactly.
于 2012-12-26T21:51:21.500 に答える
5

$str1andをむしゃむしゃ食べようとしました$str2か?

(別の) eq 'Y' を使用して同様の問題を見つけましたが、$str1最初に行ったときにのみ消えました。

chomp($str1);
if ($str1 eq 'Y') {
....
}

その後に動作します。

それが役立つことを願っています。

于 2014-10-27T09:30:58.700 に答える
-6

使用している条件が間違っている可能性があります。

$str1 == "taste" && $str2 == "waste"

THENプログラムは、指定された両方の条件が真である場合にのみパートに入ります。

で試すことができます$str1 == "taste" || $str2 == "waste"THEN上記の条件のいずれかが true の場合、これによりパーツが実行されます。

于 2012-12-27T11:37:36.307 に答える