質問: foreachで一致した説明文を表示(初心 この間ポケモン図鑑について質問させていただいた者です。(id違いますけど^^; http://oshiete1.goo.ne.jp/kotaeru.php3?q=1649007 変な質問をしてるかもしれませんm(_ _)m @list内には 手持ち・・(略)<>あくしゅう<> ほのお・こお・・<>あついしぼう<> 戦頭に出ると・・<>あめふらし<> このように1つ目に説明文、2つ目に(特性の)名前が入っています。 それを、 foreach(@list){ ($content,$name)=split(/<>/); } こんな感じでスカラー変数に代入してるのですが、 各ポケモンのデータを表示するページで説明文を表示するにはどうすればいいのでしょうか? 「$end_tokuse」というスカラー変数にあらかじめ各ポケモンの特性の名前は入っていて、それを上の処理と一致するか、しないかでこんな感じで print < eom ここに上の処理を print < eom 持って来て表示させようかと思っていたのですが、表示するデータの量がほかにもたくさんありすぎていちいち切っていると 編集が大変面倒になるので、一致した説明文をスカラー変数に代入して print < $setume eom このようにしたいのですが、どうすればいいかわかりません。 一致した説明文をスカラー変数に代入して表示させるにはどうすればいいですか。 わかりにくいですがよろしくお願いします。
回答: ちょっと何が聞きたいのか判断できません。 #以下の例のインデントは全角空白を使ってますので #コピーする時は半角などに変換してください。 #あと、書いている処理に関してはテストしてないです(^^; 特性に対する説明文を表示したいという事なのですが foreach(@list){ ($content,$name)=split(/<>/); if( $end_tokuse eq $name ){ print "$content\n"; last; } } という感じで表示できますよね? 表示するデータの量がほかにもたくさんありすぎて いちいち切っていると編集が大変面倒になるので という事ですが、「表示するデータ量」というのは 何の量なのでしょうか? 特性の量?ポケモンの量?ポケモンが持っている特性の量? 「いちいち切っていると」というのは、split()の事でしょうか? 「編集が大変」というのは、書く場所が多いから?ですか? 一致した説明文をスカラー変数に代入して表示させるには どうすればいいですか。 というのは foreach(@list){ ($content,$name)=split(/<>/); if( $end_tokuse eq $name ){ $setume = $content; last; } } という事では無いのですか? 出来れば最終的にどのように表示したいのかの 例をあげていただけるとありがたいです。 例) ピカチューの特性は雷です。 これを表示するのに 名前:ピカチュー 特性:雷 説明:ここに説明を書きたい 名前:思い浮かばない(複数特性がある場合) 特性:水 説明:水に対する説明 特性:火 説明:火に対する説明 特性が可変な為、それをどのように表示すればいいでしょうか? という感じだとわかりやすいかも・・・ あと、質問の意図とは違うかもしれませんが、 複数の特性を表示する為に簡単な方法として 1.特性に対する説明文を抜き出す関数を作る #表示部が簡易にできる。 sub getcomment(){ local( $char ) = @_; foreach( @list ){ ( $comment, $name ) = split( /<>/ ); if( $char = $name ){ return $comment; } } return "そのような特性はありません。"; } $setume = &getcomment( $end_tokusei ); 2.最初に連想配列に入れておく #分割処理が1度でいいので、表示数が増えても #処理時間が少なくて済む foreach( @list ){ ( $comment, $name ) = split( /<>/ ); $com{$name} = $comment; } print $com{$tokusei1}; print $com{$tokusei2};