秘密基地、どこに作った?

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

HTML
}

の時、$viewに$a1~$a5の値を表示させるようにしたいのですが、上記の場合ですとa1~a5として表示されます。

foreachで$_で順に数字をaと組み合わせて出来た文字列を変数として使い、元々指定してある値を取得するようにしたいのです。

どのようにすれば解決できますでしょうか。ご掲示頂けましたら幸いです。

A 回答 (3件)

$a1="あああ";


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

HTML
}
    • good
    • 0
この回答へのお礼

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

有難うございました!

お礼日時:2005/04/28 13:18

>なぜそうするといいのか?


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

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

お礼日時:2005/04/29 05:21

$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
}
のようにしますね。
    • good
    • 0
この回答へのお礼

evalというのがあったんですね。
少し調べてみましたが、文字列をPerlのコードとして実行するみたいで便利な構文があるんですね。

また配列にしたものをpushで末尾に入れて・・・も、もう少しじっくり思考してみたいと思います。

為になる解決案有難うございました。

お礼日時:2005/04/28 13:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報