Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:如何在“key”上获取密钥;参考键是实验性的;_Perl - Fatal编程技术网

Perl:如何在“key”上获取密钥;参考键是实验性的;

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

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

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

我从这样的代码中得到:

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中使用它们的列表,这会使代码更易于阅读。