• ベストアンサー

perlで配列名を動的に作り出したい

試しに次のようにしてみましたがエラーになりました。 #!/usr/local/bin/perl use strict; use warnings; my $mystr = "abcde"; my @{$mystr} = (1,2,3); $mystrの内容はいろい変わっていきます。 ご存知の方いらっしゃいましたらすみませんが教えてください。 よろしくお願いいたします。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

なんでそんなことをしたいんですか? ハッシュと無名リストへのリファレンス使って my %a =() ; $a{$mystr}=[1,2,3] ; とかやった方がいろいろ便利だと思うんですが。 ・変数名に使えない文字を$mystrに使える ・keys,each,exists等のハッシュを操作する関数が使える

noname#207939
質問者

お礼

ありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

連想配列に配列のポインターを入れるのではダメ? #!/usr/local/bin/perl use strict; use warnings; my %foo; my @bar = (1, 2, 3); # @barへのポインターを代入 $foo{'baz'} = \@bar; # $foo{'baz'}でポインターにアクセス # ポインターから配列に変えるために$を前につけて、 # 要素を取り出すために[0]を後ろにつける print ${$foo{'baz'}}[0]; ...まぁ、どうしてもそういうことをしたかったらPerlでなくPythonを使って、locals()とかになるんでしょうけれど。Perlにlocals()に相当する文法はなかったと思うので。 #!/usr/local/bin/python mystr = 'abcde' locals()[mystr] = (1, 2, 3) print abcde

noname#207939
質問者

お礼

なるほど、こんな方法も取れるのですね。 使ってみます。

すると、全ての回答が全文表示されます。
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

シンボリックリファレンスという使い方ですが、ハッシュで同様なことができるので、避けた方がよいです。 my $mystr = "abcde"; my $dv = {}; @{$dv->{$mystr}} = (1,2,3); $dv->{$mystr} = [1,2,3]; # 上と同じ どうしてもシンボリックリファレンスでないとダメということなら no strict 'refs'; my $mystr = "abcde"; @{$mystr} = (1,2,3); です。

参考URL:
http://perldoc.jp/docs/perl/5.8.8/perlref.pod#Symbolic32references
noname#207939
質問者

お礼

シンボリックリファレンスというのがあるのですね、勉強になりました。 じっくり試してみます。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A