Perl で変数の値を変数名として使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2314507

  •  22-09-2019
  •  | 
  •  

質問

変数がある場合、 $bar, 、文字列と等しい "foo" そして $foo に等しい 0xdead, 、 どうすれば入手することができますか $foo変数名の文字列しかないのに、 の値はどうなるのでしょうか?

基本的に、グローバル名前空間で一種のポインター間接参照、またはグローバル名前空間でハッシュ ルックアップを実行したいと考えています。

以下は機能しませんでした:

perl -e 'my $foo=0xdead; my $bar ="foo"; print ${$bar}."\n";' 

改行のみを出力します。

他のヒント

Perl では、シンボリック参照を使用しなければならない例が非常に非常にほとんどありません。他のすべてのインスタンスでシンボリック参照を避けることは、スタイルの問題ではありません。それは賢いプログラマーになることです。として MJD で説明します 「変数を変数名として使用する」のが愚かな理由:

問題のコードの本当のルートは次のとおりです。壊れやすいです。これを行うと、物事とは違って混ざり合っています。そして、それらの異なるもののうちの 2 つがたまたま同じ名前を持っていた場合、それらは衝突し、間違った答えが得られるでしょう。したがって、再利用しないように注意しなければならない名前の長いリストが作成されることになり、失敗すると非常に奇妙なエラーが発生します。これはまさに名前空間が解決するために発明された問題であり、それがまさにハッシュです。ポータブルな名前空間。

こちらも参照 パート2 そして パート 3.

それなし my そして $$bar 私にとってはうまくいきます:

$ perl -e '$foo=0xdead;$bar ="foo"; print $$bar."\n";'
57005

使用方法について詳しく知ることができます 変数名としての変数 の中に Perl FAQ リスト.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top