首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Perl $$var --两个美元符号作为符号?

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

Stack Overflow用户
提问于 2014-03-25 04:28:52
回答 2查看 9.4K关注 0票数 27

这看起来像是我可以很容易地搜索到Google,Bing,或者DDG,但是我对所有的东西都一无所获。

基本上,我的任务是(部分地)重写一组旧的Perl脚本。我自己不是一名Perl程序员,阅读这些脚本以弄清楚它们在做什么肯定有一个学习曲线,但我遇到了像这样的代码:

代码语言:javascript
复制
$comment = $$LOC{'DESCRIPTION'};

据我所知,右边是一个字典,或者更准确地说,它获取由字典中的键'DESCRIPTION'引用的值。但是在它前面的“额外的”美元符号是什么?

它看起来很像Perl,但是在搜索引擎、各种StackExchange站点和perlvar之后,我找不到任何迹象表明variable variables有这样的特性,更不用说它是如何被调用的了。我发现'$‘在变量名中不是一个有效的字符,所以我知道$$LOC不仅仅是调用一个恰好被命名为$LOC的变量。

这个额外的美元符号在这里做什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-25 04:30:00

这是另一种形式的取消引用。可以(老实说可能应该)写成:

代码语言:javascript
复制
$LOC->{'DESCRIPTION'};

您有时会在其他所有基本数据类型中看到相同的情况:

代码语言:javascript
复制
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";
票数 34
EN

Stack Overflow用户

发布于 2015-07-14 05:40:46

取消引用是将标量视为可以定位另一个变量(标量、数组或散列)及其值的“地址”。

在本例中,描述{$LOC}被解释为另一个标量的地址,该地址被读取到$comment中。

在Perl中,

代码语言:javascript
复制
my $str = 'some val';
my $ref = \$str;
my $val = ${$ref};
my $same_val = $$ref;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22619917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档