首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何取消引用hashref常量?

如何取消引用hashref常量?
EN

Stack Overflow用户
提问于 2010-04-17 04:32:53
回答 3查看 1.9K关注 0票数 5

假设我有一个hashref常量,如下所示:

代码语言:javascript
复制
use constant DOGS => {
    Lassie => 'collie',
    Benji  => 'mutt',
    Scooby => 'great dane',
    Goofy  => '???'
};

我怎样才能正确地取消对它的引用,以获得..他们把钥匙拿出来了吗?

代码语言:javascript
复制
warn ref DOGS; # HASH at untitled line 12.
warn keys( %{DOGS} ); # Warning: something's wrong (empty list)
warn keys( DOGS ); # Type of arg 1 to keys must be hash (not constant item)

下面是我唯一能让它工作的方法:

代码语言:javascript
复制
my $dogs = DOGS;
warn keys( %$dogs ); # LassieBenjiGoofyScooby at untitled line 15.

我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-17 04:43:30

这通常适用于您:

代码语言:javascript
复制
%{DOG()}

常量通常就是subs。但为了方便(和外观),您可能更喜欢使用Readonly,如PBP中所建议的那样。

代码语言:javascript
复制
Readonly::Hash my %DOG => 
    ( Lassie => 'collie'
    , Benji  => 'mutt'
    , Scooby => 'great dane'
    , Goofy  => '???'
    );
票数 14
EN

Stack Overflow用户

发布于 2010-04-17 05:30:25

Perldoc是你的朋友:perldoc constants

如果你在一个上下文中使用常量,它会自动引用无意义的单词(这对于任何子例程调用都是正确的),你可能会遇到麻烦。例如,您不能说$hash{CONSTANT},因为"CONSTANT“将被解释为字符串。使用常量{$hash()}或常量{+$hash}来防止裸词引用机制发挥作用。类似地,由于" =>“操作符在其左侧紧邻引用了一个不带引号的单词,因此您必须说"CONSTANT() => 'value'”(或者简单地使用逗号代替大箭头),而不是"CONSTANT => 'value'“。

warn keys %{DOG()}应该可以做到这一点。

票数 5
EN

Stack Overflow用户

发布于 2010-04-17 04:39:49

强制它进入列表上下文...

代码语言:javascript
复制
warn keys(%{(DOGS)});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2655937

复制
相关文章

相似问题

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