如何在Perl中将变量的值用作变量名?

Ros*_*ers 1 perl symbolic-references

如果我有一个变量,$bar它等于字符串"foo"并且$foo等于0xdead,那么$foo当我只有变量名的字符串时,如何得到值?

本质上,我想在全局命名空间上执行一种指针间接寻址或在全局命名空间上执行哈希查找.

以下不起作用:

perl -e 'my $foo=0xdead; my $bar ="foo"; print ${$bar}."\n";' 
Run Code Online (Sandbox Code Playgroud)

它只打印换行符.

cod*_*lic 7

此技巧仅适用于全局变量(符号引用搜索当前包的符号表),即

perl -e '$foo=0xdead; my $bar ="foo"; print ${$bar}."\n";' 
Run Code Online (Sandbox Code Playgroud)

如果你想捕捉词汇,你将不得不使用 eval ""

perl -e 'my $foo=0xdead; my $bar ="foo"; print eval("\$$bar"),"\n";' 
Run Code Online (Sandbox Code Playgroud)

但是无用的使用eval ""在Perl中被认为是坏的风格,以及使用全局变量.考虑使用真实参考(如果可以).