这似乎是我应该能够容易地使用Google,Bing或DDG的东西,但是我在所有的事情上都完全是空的.
基本上,我的任务是(一部分)重写一套旧的Perl脚本.自己不是一个Perl程序员,阅读这些脚本肯定是一个学习曲线,以弄清楚他们在做什么,但是我用绝对的砖墙打了这样一条线:
$comment = $$LOC{'DESCRIPTION'};
接近我可以看出,右边是一个字典,或者更准确地说,它在该字典中获得了由“DESCRIPTION”键引用的值.但是在这个前面的“额外”美元符号呢?
它看起来像PHP的variable variables可疑,但是在搜索引擎,各种StackExchange网站和perlvar之后,我找不到任何迹象表明Perl甚至有这样的功能,更不用说这是如何被调用的.最糟糕的是,’$’不是变量名中的有效字符,所以我知道$$LOC不仅仅是调用一个恰好被命名为$LOC的变量.
这个额外的美元符号在这里做什么?
解决方法
这是一种替代形式的取消引用.可能(并且诚实地应该)写成:
$LOC->{'DESCRIPTION'};
您有时会看到与其他所有基本数据类型相同的内容:
my $str = 'a string'; my %hash = (a => 1,b => 2); my @array = (1..4); my $strref = \$str; my $hashref = \%hash; my $arrayref = \@array; print "String value is $$strref\n"; print "Hash values are either $$hashref{a} or $hashref->{b}\n"; print "Array values are accessed by either $$arrayref[0] or $arrayref->[2]\n";