• ベストアンサー

検索で二つが一致した場合「OK」と表示させたいのですが

こんにちは、いつもお世話になっております。 早速質問失礼します。 以前「名前を検索して一致した場合」出身地等を表示するのを作ったのですが、これを「名前とパスを検索して一致した場合」OKと表示させたいのです。 ーーーーーーーーーーーーーーー open(rd,"./file.txt"); @file = <rd>; close(rd); foreach $ww2 (@file){ ($name,$pass,$shushin,$other) = split(/,/,$ww2); chomp($name); chomp($pass); chomp($shushin); chomp($other); $PS{$name} = $pass; $SHU{$name} = $shushin; $OTHER{$name} = $other; } @name1 = keys ( %SHU ); #???? my $FOUND = 0; foreach $string (@name1){ if($string eq $FORM{'item1'}){ $FOUND = 1; print "見つかった名前:$string <br>     出身地:$SHU{$string} <br>     その他:$OTHER{$string}\n"; } } unless($FOUND){print"見つかりません!再度入力してください!";} ーーーーーーーーーーーーーーーーーー 上記を if($string eq $FORM{'item1'})の後にさらにifで if($string eq $FORM{'item1'}){ if($string eq $FORM{'item2'}){ print "OK"; } } という感じにしたのですが動いてくれません。 一つの検索のときはきちんと動くのですが二つになるとさっぱりです。 プログラムの書き込みをお願いできますでしょうか? それと、@name1 = keys( %SHU ); #???? こちらの一文はどういうことに使われてるのかが良くわかりません。 申し訳ないですが解説の方宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

質問文の内容から、 「名前」と「パス」が一致するか検査するという意味でしょうから 名前と$FORM{'item1'} 名前と$FORM{'item2'} では、一緒(eq)になるはずもないような気がします。 推測するに、item2がパスだとすると if(($string eq $FORM{'item1'}) && ($PS{$string} eq $FORM{'item2'})){ print "OK"; } とすればいいと思います。

terunosuke
質問者

お礼

返信遅れましてすみません。 そして、ありがとう御座います。 指摘した所を直したとこ動作しました。

その他の回答 (1)

回答No.1

>上記を >if($string eq $FORM{'item1'})の後にさらにifで > >if($string eq $FORM{'item1'}){ >if($string eq $FORM{'item2'}){ > >print "OK"; > >} >} これはロジック的にはおかしくないですよ。 もしこれであなたの意図した動作をしないのであればデータを疑うべきです。 あなたの示したスクリプトでは$stringの値や$FORM{'item1'}、$FORM{'item2'}の中身がどうなっているのかがわかりません。 実際スクリプトを動かす時、特にそのif文の直前に print "string = $string<br>\n"; print "item1 = $FORM{'item1'}<br>\n"; print "item2 = $FORM{'item2'}<br>\n"; のようなものを挿入して値を確認してみればどうでしょうか? ---------------------------------------------- >@name1 = keys( %SHU ); これはkeysをキーワードに検索すれば山のように出てきます。質問する前には事前にご自分で検索することをお勧めします。 例えば %SHU = ( 'abc' => '123', 'def' => '456', 'ghi' => '789', 'jkl' => '012', 'mno' => '345', ); こうなっていて @name1 = keys( %SHU ); を実行すれば @name1 = ('abc', 'def', 'ghi', 'jkl', 'mno'); となります。 つまりハッシュは $HASH{name} = value; こういう形になっていますがkeysはnameの配列を作ります。

terunosuke
質問者

お礼

回答ありがとう御座います。 色々調べてみたのですが、理解に苦しみこちらにカキコしました。 解りやすい解説をありがとう御座います。 参考になりました。

関連するQ&A