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

con*_*con 3 perl

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

"参考的关键是实验性的"

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

foreach my $f (keys($normal{$nuc}{$e})) {#x, y, and z
Run Code Online (Sandbox Code Playgroud)

我在这里找到了类似StackOverflow的东西:

Perl抛出"引用上的键是实验性的"

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

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

Sob*_*que 8

keys %{$normal{$nuc}{$e}}
Run Code Online (Sandbox Code Playgroud)

例如,首先取消引用它.

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

my $ref = $normal{$nuc}{$e};
print keys %$ref; 
Run Code Online (Sandbox Code Playgroud)


Bor*_*din 5

问题是它$normal{$nuc}{$e}是一个哈希引用,并且keys正式只接受哈希.解决方案很简单 - 您必须取消引用该引用 - 您可以通过编写来解决这个问题

for my $f ( keys %{ $normal{$nuc}{$e} } ) { ... }
Run Code Online (Sandbox Code Playgroud)

但是将哈希引用提取到中间变量中可能更明智.这将使您的代码更加清晰,就像这样

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

for my $f ( keys %$hr ) { ... }
Run Code Online (Sandbox Code Playgroud)

我鼓励你写出更有意义的变量名.$f并且$e可以告诉你很多,而你写它,但它肯定会引起别人的问题,它甚至可能会回来一两年来打你的路线

同样,我确信有一个更好的标识符$hr,但我不知道你的数据结构的各个级别的含义,所以我不能做得更好.请将其称为与其指向的数据相关的内容