2014-09-06 82 views
-1

我试图打印散列的匿名散列的匿名散列,但没有得到期望的输出如何打印散列

$hash = { 
      name => { 
       nitesh => mine, 
       ankush => yours 
      }, 
      Company => { 
       XYZ => mine, 
       other => sector_32 
      } 
}; 


foreach $key (sort keys %$hash) { 
    print "\n key is $key"; 
    foreach $key2 (sort keys %{$hash=>{$key}}) { 
     print "\n key2 is $key2"; 
    } 
} 

获取输出

key is Company 
key2 is Company 
key is name 
key2 is name 
+4

'使用严格的;使用警告;'始终将其放在代码的顶部 – Gabs00 2014-09-06 09:09:52

+0

您应始终使用缩进来使代码更易于阅读并避免简单的语法错误。我这次为你修好了。看看它更容易阅读? – TLP 2014-09-06 10:33:44

+0

另外,请注意,用逗号运算符'=>',左手参数将自动被引用,如果尚未引用。即'foo => 1'将变成'“foo”=> 1'。但右手参数不会被引用,它将成为所谓的“裸号”,除非其名称与保留字冲突,否则*可视为字符串。所以你需要引用那个部分,如果它是一个字符串:'foo =>“bar”'。 – TLP 2014-09-06 10:39:22

回答

5

您使用的是=>拿到钥匙的内部散列,当你应该使用->。记得引用您的哈希值,并use strict; use warnings;添加到您的脚本的顶部:

use strict; 
use warnings; 

my $hash = { 
    name => {nitesh => 'mine', ankush => 'yours'}, 
    Company => { XYZ => 'mine', other => 'sector_32'} 
}; 


foreach my $key (sort keys %$hash) { 
    print "key is $key\n"; 
    foreach my $key2 (sort keys %{$hash->{$key}}) { 
     print "key2 is $key2\n"; 
    } 
} 

输出:

key is Company 
key2 is XYZ 
key2 is other 
key is name 
key2 is ankush 
key2 is nitesh 
+0

感谢您的回答 – Nitesh 2014-09-06 09:11:32

+0

没问题,只是更新了它。 – 2014-09-06 09:12:39

+2

@Nitesh参考文献[箭头运算符](http://perldoc.perl.org/perlop.html#The-Arrow-Operator)和[逗号运算符](http://perldoc.perl.org/perlop.html#Comma - 运算符)。值得一提的是'%{$ hash - > {$ key}}'也可以写成'%{$$ hash {$ key}}',尽管' - >'使得它更清晰。 – 2014-09-06 09:50:17