Perl:如何在“key”上获取密钥;参考键是实验性的;
我正在寻找解决Perl警告的方法 “参考上的键是实验性的” 我从这样的代码中得到:Perl:如何在“key”上获取密钥;参考键是实验性的;,perl,Perl,我正在寻找解决Perl警告的方法 “参考上的键是实验性的” 我从这样的代码中得到: foreach my $f (keys($normal{$nuc}{$e})) {#x, y, and z 我在StackOverflow上发现了类似的内容: 但我不知道如何在我的情况下应用它 如何在不抛出此错误的情况下获取多键哈希的键 keys %{$normal{$nuc}{$e}} 例如,先取消对它的引用 如果您有一个参考开始,您不需要{},例如: my $ref = $normal{$nuc}{$e
foreach my $f (keys($normal{$nuc}{$e})) {#x, y, and z
我在StackOverflow上发现了类似的内容:
但我不知道如何在我的情况下应用它
如何在不抛出此错误的情况下获取多键哈希的键
keys %{$normal{$nuc}{$e}}
例如,先取消对它的引用
如果您有一个参考开始,您不需要{}
,例如:
my $ref = $normal{$nuc}{$e};
print keys %$ref;
问题是,
$normal{$nuc}{$e}
是一个哈希引用,键
正式只接受哈希。解决方案很简单,您必须取消引用,您可以通过编写
for my $f ( keys %{ $normal{$nuc}{$e} } ) { ... }
但将散列引用提取到中间变量可能更明智。这将使您的代码更加清晰,就像这样
my $hr = $normal{$nuc}{$e};
for my $f ( keys %$hr ) { ... }
我鼓励您编写更有意义的变量名$f
和$e
可能会在您编写时告诉您很多信息,但它肯定会导致其他问题,甚至可能在一两年后再次影响您
同样,我确信有一个比$hr
更好的标识符,但我不知道您的数据结构的各个级别的含义,因此我无法做得更好。请称之为与它所指向的数据相关的东西
keys $hash_ref
参考上的警告键的原因是实验性的吗
解决方案:
keys %{ $hash_ref }
参考:
琐事:这一实验行为已从5.24中删除。在5.24+中按
键($ref)
会失败,就像实验开始前一样。谢谢,你完全正确。我在一年多前写了这个脚本,后来又写了回来,忘记了许多变量的含义。在阅读其他人的python脚本时,我遇到了标识符不好的问题。在很多情况下,如果您知道散列键可以是什么,那么应该在foreach中使用它们的列表,这会使代码更易于阅读。