这看起来像是我可以很容易地搜索到Google,Bing,或者DDG,但是我对所有的东西都一无所获。
基本上,我的任务是(部分地)重写一组旧的Perl脚本。我自己不是一名Perl程序员,阅读这些脚本以弄清楚它们在做什么肯定有一个学习曲线,但我遇到了像这样的代码:
$comment = $$LOC{'DESCRIPTION'};
据我所知,右边是一个字典,或者更准确地说,它获取由字典中的键'DESCRIPTION'
引用的值。但是在它前面的“额外的”美元符号是什么?
它看起来很像Perl,但是在搜索引擎、各种StackExchange站点和perlvar之后,我找不到任何迹象表明variable variables有这样的特性,更不用说它是如何被调用的了。我发现'$‘在变量名中不是一个有效的字符,所以我知道$$LOC
不仅仅是调用一个恰好被命名为$LOC
的变量。
这个额外的美元符号在这里做什么?
发布于 2014-03-25 04:30:00
这是另一种形式的取消引用。可以(老实说可能应该)写成:
$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";
发布于 2015-07-14 05:40:46
取消引用是将标量视为可以定位另一个变量(标量、数组或散列)及其值的“地址”。
在本例中,描述{$LOC}被解释为另一个标量的地址,该地址被读取到$comment中。
在Perl中,
my $str = 'some val';
my $ref = \$str;
my $val = ${$ref};
my $same_val = $$ref;
https://stackoverflow.com/questions/22619917
复制相似问题