我遇到了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}
,但脚本无法正常运行。
你知道我哪里出错吗?
答案 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}
。