- ベストアンサー
foreach文で条件式を処理したいのですが、なぜ評価しないのか分からない。
以下の式で $aaaが$tmpと同じ値が有るのですが、 @Messagesの最後に取得した$_の$aaaしか値が入らず、 $aaaが$tmpにマッチしません。 foreach (@Messages) { ($aaa,$bbb,$ccc) = split(/¥t/,$_,3); if($aaa eq $tmp){ #ここがうまくいかない! push(@NEWS,$_); } } よろしく教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ウチでもテストしてみましたが、問題なく動きました。 @Messagesの内容で、タブで区切られているということですが、 '\tData1\tData2\tData2' になっている場合がありませんか? この場合 $aaaは、''になります。
その他の回答 (2)
- moon_piyo
- ベストアンサー率60% (88/146)
foreachの中の別のスクリプトが、if文より先に動くと仮定した場合ですが・・・ ・その中でnext、continue文が行われ、後続のコードの処理をスキップしている あるいは ・よくみたらif文はforeachループの外に書かれていた ・ループに入る直前で@Messagesの要素数が1 ということはないでしょうか?
お礼
ご指摘のところを確認しましたがOKでした。 皆さまのおかげで、原因を絞込めました。 原因は、$tmpにスペースが入っていたことです。 お騒がせいたしましたが。 ありがとうございます。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
split(/¥t/,$_,3); がうまくいってないのではないですか? /¥t/ってホントにマッチしてます?
補足
早速ありがとうございます。 split(/¥t/,$_,3); の部分は、\tですがこの掲示板でなぜか文字化けしてますね。 実際は、foreach文の中で別のスクリプトも動かしていますが、 そちらはOKなのでこの部分は問題ないと思います。 $aaa,$tmpも、値自体は入ります。 $aaaが求める値になるまで、コードを繰り返さない原因が分かりません。
お礼
テストしていただきありがとうございました。 スクリプトの問題でないことが確認でき、 原因を絞込めました。 原因は、$tmpにスペースが入っていたことです。 お騒がせいたしましたが、お陰様で解決できました。 ありがとうございます。