在 Perl 中如何使用变量的值作为变量名?
-
22-09-2019 - |
题
如果我有一个变量, $bar
, ,等于字符串 "foo"
和 $foo
等于 0xdead
, , 我怎样才能得到 $foo
的值,而我只有变量名的字符串?
本质上,我想在全局命名空间上进行一种指针间接寻址或在全局命名空间上进行哈希查找。
以下内容不起作用:
perl -e 'my $foo=0xdead; my $bar ="foo"; print ${$bar}."\n";'
它只打印换行符。
解决方案
这招只适用于全局变量(符号引用寻求符号表当前包的)中,i。即
perl -e '$foo=0xdead; my $bar ="foo"; print ${$bar}."\n";'
如果你想捕获的词汇,你将不得不使用eval ""
perl -e 'my $foo=0xdead; my $bar ="foo"; print eval("\$$bar"),"\n";'
但使用eval ""
无目的被认为是不好的风格在Perl,以及使用全局变量。考虑使用真正的引用(如果可以的话)。
其他提示
在 Perl 中,只有极少数实例必须使用符号引用。在所有其他情况下避免符号引用与风格无关。这是关于成为一名聪明的程序员。作为 米吉德 解释于 为什么“使用变量作为变量名”是愚蠢的:
问题代码的真正根源是:很脆弱。当你这样做的时候,你就融入了不同的事物。如果其中两个不同的事物碰巧具有相同的名称,它们就会发生碰撞,你就会得到错误的答案。所以你最终会得到一长串的名字,你必须小心不要重复使用,如果你搞砸了,你会得到一个非常奇怪的错误。这正是发明名称空间要解决的问题,而这正是哈希的含义:可移植的命名空间。
无my
与$$bar
对我的作品:
$ perl -e '$foo=0xdead;$bar ="foo"; print $$bar."\n";' 57005
您可以了解更多有关使用的变量如 Perl的问题列表变量名
不隶属于 StackOverflow