假设我有一个hashref常量,如下所示:
use constant DOGS => {
Lassie => 'collie',
Benji => 'mutt',
Scooby => 'great dane',
Goofy => '???'
};
Run Code Online (Sandbox Code Playgroud)
我怎样才能正确地取消引用它来说出来......它们的关键是什么?
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)
Run Code Online (Sandbox Code Playgroud)
以下是我能够使它工作的唯一方法:
my $dogs = DOGS;
warn keys( %$dogs ); # LassieBenjiGoofyScooby at untitled line 15.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Axe*_*man 14
这通常适合您:
%{DOG()}
Run Code Online (Sandbox Code Playgroud)
常数通常只是潜艇.但是为了方便(和外观),您可能更喜欢使用Readonly,如PBP中所建议的那样.
Readonly::Hash my %DOG =>
( Lassie => 'collie'
, Benji => 'mutt'
, Scooby => 'great dane'
, Goofy => '???'
);
Run Code Online (Sandbox Code Playgroud)
Perldoc是你的朋友: perldoc constants
如果在自动引用裸字的上下文中使用常量,则可能会遇到麻烦(对于任何子例程调用都是如此).例如,您不能说$ hash {CONSTANT}因为"CONSTANT"将被解释为字符串.使用$ {哈希常数()}或$ {哈希值+常数冲防止裸词引用机制在踢.同样,由于"=>"运算符立即引用了裸词在它的左边,你不得不说"常数()=>'value'"(或简单地用逗号代替大箭头)而不是"CONSTANT =>'value'".
warn keys %{DOG()} 应该做的伎俩.
| 归档时间: |
|
| 查看次数: |
1792 次 |
| 最近记录: |