Perl:如何在关键“引用键上获取键是实验性的”

时间:2016-05-25 13:07:32

标签: perl

我正在寻找Perl警告的解决方案

“参考的关键是实验性的”

我从这样的代码中得到了这个:

foreach my $f (keys($normal{$nuc}{$e})) {#x, y, and z

我在StackOverflow上发现了类似的东西:

Perl throws "keys on reference is experimental"

但我不知道如何在我的情况下应用它。

如何在不抛出此错误的情况下获取多个键控哈希的键?

3 个答案:

答案 0 :(得分:8)

keys %{$normal{$nuc}{$e}}

E.g。首先取消引用它。

如果你有一个开头的参考,你不需要{}例如:

my $ref = $normal{$nuc}{$e};
print keys %$ref; 

答案 1 :(得分:5)

问题是$normal{$nuc}{$e}是哈希引用,而keys将正式接受哈希。解决方案很简单 - 您必须取消引用引用 - 您可以通过编写来解决此问题

for my $f ( keys %{ $normal{$nuc}{$e} } ) { ... }

但将哈希引用提取到中间变量可能更明智。这将使您的代码更清晰,如此

my $hr = $normal{$nuc}{$e};

for my $f ( keys %$hr ) { ... }

我建议你写一些更有意义的变量名。 $f$e可能会在你写这篇文章的过程中告诉你很多,但肯定会引起别人的问题,甚至可能会在一年或两年内找回你

同样,我确信标识符比$hr更好,但我不知道您的数据结构的各个级别的含义所以我无法&# 39;做得更好。请将其称为与其指向的数据

相关的内容

答案 2 :(得分:-1)

keys $hash_ref 

是引用上的警告键是实验的原因

解决方案:

keys %{ $hash_ref }

参考:

https://www.perl.com/pub/2005/07/14/bestpractices.html/