Perlの連想配列名に変数を代入したい

[上に] [前に] [次に]
ちはる [E-Mail] 1998/11/19(木) 02:38:06
ちょっと誰かしっていたらお教えください。
perl で %a0 %a1 %a2 〜 %a20 のような名前が連番になったような連想配列があるとします。

ここで 変数 $x を この連想配列名を指定するのに使いたいのですが。

$x =a0 ;
foreach $keys (sort keys %a0){
 ;
}
このように。
ここの%a0 に %$x のような感じに代入?したいのですが。。

ちはる [E-Mail] 1998/11/19(木) 02:39:58
間違って途中で送信してしまいました。
続きです。
さすがに $a0{'$key'} っていうところを
$$x{'$key'}というふうには出来ませんよね?
こういう場合、どうしたらいいのでしょうか。

B-Cus 1998/11/19(木) 07:03:36
できると思いますよ。

 %a0=('a','A','b','B');
 $x=a0;
 foreach ( sort keys %$x ){
  print "\$${x}{$_}=$$x{$_}\n";
 }

実行結果
 $a0{a}=A
 $a0{b}=B

こーゆーのをシンボリックリファレンスと言います。
# ハードリファレンスもあるでよ。

リファレンスを使うにはperl5が必要です。
perl4で動かしたい場合はエバりましょう(evalね)。

ところでみなさん、シンボリックリファレンスと
ハードリファレンス、どちらを使いますか?
また、どのように使い分けてますか?

B-Cus 1998/11/19(木) 07:31:44
補足。ハードリファレンスだとこんな感じ。

$x=\%a0;
foreach ( sort keys %$x ){
 print "\$hash{$_}=$$x{$_}\n";
}

リファレンスを学ぶには…やっぱり青いラクダ本かなぁ。

# 実は、ちょっと複雑なハードリファレンスを使うと理解できなくなるので、
# もう少しリファレンスについて詳しく書いてある本が欲しかったりする。

ちはる [E-Mail] 1998/11/19(木) 17:12:08
[[解決]]
ふむふむ!
%$x は使えるのですね。
print "\$${x}{$_}=$$x{$_}\n";
これがミソなんですね。。。。。もしかしたら $($x){$_} っていうのはアリかなぁ。なんて想像していたのですが(笑)

>リファレンスを学ぶには…やっぱり青いラクダ本かなぁ。
やはり、ああいう分厚いリファレンス本はないと駄目ですかね?
手元のPerlクイックリファンレスには hashは載ってなかったです。
ともかく、これでひとまず解決いたしました。ありがとうございます。

[上に] [前に] [次に]