変数値の再評価は?

[上に] [前に] [次に]
きゅんべる 1999/06/10(木) 01:01:10
例えば、
$var = '$a';
$a = 'hello';

といった状況で、$varをつかって、'hello'を得たいのですが、
どうすればいいのでしょう?

$var =~ s/\$([a-zA-Z_]\w*)/sprintf(${$1})/ge;

とかやって見たんですけど、Perl 4 ではうまくいきません。
(Perl 5 では OKみたいです。)

B-Cus 1999/06/10(木) 01:05:30
1. エバる。perl4/5両方で可。
  $var = '$a';
  $a = 'hello';
  print eval($var);
2. リファレンス。perl5のみ。
  $var = \$a;
  $a = 'hello';
  print $$var;
 これ↑は…シンボリックリファレンスだったかな、それともハード
 リファレンスだったかな…? とにかく青いラクダ本を見るべし。

B-Cus 1999/06/10(木) 01:10:16
ああ、そっか。これ↓がシンボリック。さっきのはハード。
 $var = 'a';
 print ${$var};
あと、型グロブを使う方法もあったっけ。

きゅんべる 1999/06/10(木) 01:23:19
[[解決]]
 なるほど、エバればいいのかっ

 3時間くらい悩んだのに、10分で答えが分かってしまうとは、
いや、なんか癖になりそうです。

 どうも、ありがとうございました。

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