假设我有一个hashref常量,如下所示:
use constant DOGS => {
Lassie => 'collie',
Benji => 'mutt',
Scooby => 'great dane',
Goofy => '???'
};我怎样才能正确地取消对它的引用,以获得..他们把钥匙拿出来了吗?
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)下面是我唯一能让它工作的方法:
my $dogs = DOGS;
warn keys( %$dogs ); # LassieBenjiGoofyScooby at untitled line 15.我做错了什么?
发布于 2010-04-17 04:43:30
这通常适用于您:
%{DOG()}常量通常就是subs。但为了方便(和外观),您可能更喜欢使用Readonly,如PBP中所建议的那样。
Readonly::Hash my %DOG =>
( Lassie => 'collie'
, Benji => 'mutt'
, Scooby => 'great dane'
, Goofy => '???'
);发布于 2010-04-17 05:30:25
Perldoc是你的朋友:perldoc constants
如果你在一个上下文中使用常量,它会自动引用无意义的单词(这对于任何子例程调用都是正确的),你可能会遇到麻烦。例如,您不能说$hash{CONSTANT},因为"CONSTANT“将被解释为字符串。使用常量{$hash()}或常量{+$hash}来防止裸词引用机制发挥作用。类似地,由于" =>“操作符在其左侧紧邻引用了一个不带引号的单词,因此您必须说"CONSTANT() => 'value'”(或者简单地使用逗号代替大箭头),而不是"CONSTANT => 'value'“。
warn keys %{DOG()}应该可以做到这一点。
发布于 2010-04-17 04:39:49
强制它进入列表上下文...
warn keys(%{(DOGS)});https://stackoverflow.com/questions/2655937
复制相似问题