• ベストアンサー

Perlの書き方について

perlを勉強していて、似たような配列やハッシュの場合でしたらなんとか解決出来たのですが、以下の場合が思うような結果が得られず困っているので、どなたか教えていただきたく質問しました。 例) my $hoge1=10; my $hoge2=9; my $hoge3=8; my $hoge4=7; my $hoge5=6; my $hogehoge; for(1..5){ $hogehoge+=$hoge$_; } 上記の書き方の場合、「$hoge$_」でエラーが出ます。 このような場合は、どのように書けばいいのでしょうか。 よろしくお願いします。

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

  • ベストアンサー
回答No.2

> 「$hoge$_」のような書き方は出来ないのでしょうか。 似たようなことをやる方法はありますが、その書き方は推奨されていないと思います。 実行中のプログラムの変数を文字列だと思い、実行中のプログラム中の変数と連結してその値を得るには一つメタな立場にあがらないといけません。例えるなら、プログラムを実行している視点から、プログラムを書いている視点にあがるとも言えるかもしれません。多くのスクリプト言語にはそれをするためにevalという命令が用意してあります。 ただ、evalはそこに書かれている文字をプログラムだと思って愚直に実行するので、そこに書かれる文字を完全に制御できないと非常に危険です。よって、まともな人ならevalを実用するプログラムには使いません。なお、perlのevalには環境を分けるなど別の使い方もあります。詳しくはこれを御覧ください。 http://www.effectiveperlprogramming.com/2011/03/know-the-different-evals/ 一応、evalを使った書き方です。 $hogehoge+=eval('$hoge' . $_);

hana43
質問者

お礼

丁寧に教えていただきありがとうございます。 evalについて、このような使い方があったとは知らず、参考URLも拝見させていただきました。 やはり、配列などを使ってのやり方が一番使いやすいようなので、そちらでやってみたいと思います。 ありがとうございました。

その他の回答 (2)

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.3

$hogehoge += eval("\$hoge$_"); 通常のコードで使うのはお勧めできませんが、上記のようにすればエラーなく動くようになります。

回答No.1

my @hoge; $hoge[1]=10; $hoge[2]=9; $hoge[3]=8; $hoge[4]=7; $hoge[5]=6; my $hogehoge = 0; for(1..5){ $hogehoge+=$hoge[$_]; }

hana43
質問者

補足

早速ありがとうございます。 やはり、今回の場合は配列を使うしかないのですかね。 「$hoge$_」のような書き方は出来ないのでしょうか。