• ベストアンサー

foreach (1..4){ 英文字$_→$新しい変数として使いたい

$a1="あああ"; $a2="いいい"; $a3="ううう"; $a4="えええ"; $a5="おおお"; foreach (1..5){ $view = "a$_"; print <<"HTML"; $view<BR> HTML } の時、$viewに$a1~$a5の値を表示させるようにしたいのですが、上記の場合ですとa1~a5として表示されます。 foreachで$_で順に数字をaと組み合わせて出来た文字列を変数として使い、元々指定してある値を取得するようにしたいのです。 どのようにすれば解決できますでしょうか。ご掲示頂けましたら幸いです。

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

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

$a1="あああ"; $a2="いいい"; $a3="ううう"; $a4="えええ"; $a5="おおお"; foreach (1..5){ $view = ${"a$_"}; print <<"HTML"; $view<BR> HTML }

taku0
質問者

お礼

"a$_"を${}内にもってくれば良かったんですね。 なぜそうするといいのか・・・については、{}の意味など調べてみたいと思います。 有難うございました!

その他の回答 (2)

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

>なぜそうするといいのか? 言語的な説明: 変数名の文字列をリファレンスとして使うことをシンボリックリファレンスと言います。 Perlでは、\を使ってリファレンス(参照)を使うことができます。Cで言うポインタみたいなもので変数の中身でなく、変数そのものを指すものみたいなものです。$を使ってリファレンスからその中身(変数そのものを使って変数の中身を取り出す)を取り出すことができます。これをデリファレンスといいます。 文字列を使ったリファレンス・デリファレンスといっても $"a1"とは書けないのでその部分が変数名ですよと示してやるために ${"a1"}の様に書きます。 また、 $temp="a$_"; として $view=$$temp; としても同じ意味になります。

taku0
質問者

お礼

例と共に詳しいご説明有難うございます。 ご教授感謝致します。

  • alicia-y
  • ベストアンサー率40% (85/208)
回答No.1

$a1="あああ"; $a2="いいい"; $a3="ううう"; $a4="えええ"; $a5="おおお"; foreach (1..5){ eval '$view = $' . "a$_"; print <<"HTML"; $view<BR> HTML } とします。 でも私なら push @a , "あああ"; push @a , "いいい"; push @a , "ううう"; push @a , "えええ"; push @a , "おおお"; foreach $view (@a){ print <<"HTML"; $view<BR> HTML } のようにしますね。

taku0
質問者

お礼

evalというのがあったんですね。 少し調べてみましたが、文字列をPerlのコードとして実行するみたいで便利な構文があるんですね。 また配列にしたものをpushで末尾に入れて・・・も、もう少しじっくり思考してみたいと思います。 為になる解決案有難うございました。

関連するQ&A