Perl $$ var - 作为sigil的两个美元符号?

Kro*_*mey 25 perl

这似乎是我应该能够轻松地使用Google,Bing或DDG的东西,但是我对所有东西都是空洞的.

基本上,我的任务是(部分)重写一组旧的Perl脚本.我自己并不是Perl程序员,在阅读这些脚本以确定他们正在做什么时,肯定会有一个学习曲线,但是我用这样的线条击中了一个绝对的砖墙:

$comment = $$LOC{'DESCRIPTION'};
Run Code Online (Sandbox Code Playgroud)

我可以说,右边是一个字典,或者更确切地说,它是获取'DESCRIPTION'所述字典中的键引用的值.但是前面有"额外"美元符号的是什么?

它看起来很像PHP的变量变量,但在搜索引擎,各种StackExchange站点和perlvar之后,我找不到Perl甚至这样一个功能的任何迹象,更不用说这就是它被调用的方式了.我发现的最多的是'$'不是变量名中的有效字符,所以我知道$$LOC不只是调用恰好被命名的变量$LOC.

这个多余的美元符号在这做什么?

Mil*_*ler 32

这是解除引用的另一种形式.可以(并且可能应该)写成:

$LOC->{'DESCRIPTION'};
Run Code Online (Sandbox Code Playgroud)

您有时会看到与其他所有基本数据类型相同的内容:

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";
Run Code Online (Sandbox Code Playgroud)

  • 如果要访问整个数组,可以使用`@ array`.或者整个哈希,使用`%hash`.但是,要访问数组或散列的元素,必须分别使用`$ array [3]`或`$ hash {key}`.所以在下一行中,`%DEFAULT`是一个普通的散列,而`SCRIPT`是该散列的一个键,其值被分配给`$ script`. (3认同)