不推荐使用散列作为引用

时间:2014-12-11 12:22:10

标签: perl

我遇到了Perl脚本的问题,但不知道为什么。我有类似的东西

..
$ref = pfget($Pf, "criteria");
%criteria= %$ref;
..
..
foreach $key (keys %criteria) {
  $expr = %criteria->{$key};
  ..
}

$expr = %criteria->{$key}行给出了错误

Using a hash as a reference is deprecated

我已经尝试了$expr = $criteria{$key},但脚本无法正常运行。

你知道我哪里出错吗?

2 个答案:

答案 0 :(得分:10)

标量上下文中的

%criteria假设返回有关散列的统计信息。

$ perl -E'my %h = ( a=>1, b=>2, c=>3 ); say scalar %h'
3/8

所以

%criteria->{$key}

装置

"3/8"->{$key}

但Perl中的一个错误导致它表现为

(\%criteria)->{$key}

警告告诉您,您的代码存在错误,因为您的代码依赖于Perl中的错误。使用

$criteria{$key}

或避免创建%criteria和使用

的浪费
for my $key (keys %$ref) {
   ... $ref->{$key} ...
}

答案 1 :(得分:3)

%criteria指的是整个哈希值。

%criteria= %$ref; 

$ref引用的整个哈希值复制到名为%criteria的新哈希中。

要访问该哈希中的值,您只需使用$criteria{$key}

如果你想使用引用(效率更高!),你可以使用$ref->{$key}