如何访问定义为常量的Perl哈希

如何访问定义为常量的Perl哈希,perl,constants,Perl,Constants,如果我将Perl哈希定义为常量,如: use constant SITES => {foo => 1, bar => 2}; 如何检索foo和bar的值$网站{foo}不起作用 my $site_foo = SITES->{foo}; my $site_bar = SITES->{bar}; SITES本质上是一个返回散列引用的子例程。因为它是一个常量,所以不需要在变量前面使用$,值是散列引用,而不仅仅是散列,所以散列{'key'}将不起作用。 改为使用SITE

如果我将Perl哈希定义为常量,如:

use constant SITES => {foo => 1, bar => 2};
如何检索foo和bar的值$网站{foo}不起作用

my $site_foo = SITES->{foo};
my $site_bar = SITES->{bar};

SITES
本质上是一个返回散列引用的子例程。

因为它是一个常量,所以不需要在变量前面使用$,值是散列引用,而不仅仅是散列,所以散列{'key'}将不起作用。
改为使用
SITE->{'foo'}

{foo=>1,bar=>2}
是一个哈希引用。。。它是对非常量散列的引用。例如,您可以执行
站点->{foo}=27
,而不会触发异常或错误。如果您对不可修改的散列非常认真,那么您应该查看
只读
常量::快速
,等等
use constant
对于特定的工作来说是错误的工具我的理解是Perl解释器可能会内联常量子例程,比如那些由
constant
pragma生成的子例程,因此我的限定非常轻微。它是,但子例程仍然存在,即使在实践中很少真正调用它,因为对它的调用已经过优化。