プロが教える店舗&オフィスのセキュリティ対策術

試しに次のようにしてみましたがエラーになりました。

#!/usr/local/bin/perl
use strict;
use warnings;
my $mystr = "abcde";
my @{$mystr} = (1,2,3);

$mystrの内容はいろい変わっていきます。

ご存知の方いらっしゃいましたらすみませんが教えてください。
よろしくお願いいたします。

A 回答 (3件)

なんでそんなことをしたいんですか?


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

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

お礼日時:2012/08/25 17:33

連想配列に配列のポインターを入れるのではダメ?


#!/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
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/08/25 17:24

シンボリックリファレンスという使い方ですが、ハッシュで同様なことができるので、避けた方がよいです。



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#Sy …
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/08/25 17:29

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