在Perl中打印哈希

时间:2013-03-22 06:10:35

标签: perl hash

我想知道以下代码为什么要打印“2/8”。

#!/usr/bin/perl
#use strict;
#use warnings;
%a = ('a'=>'dfsd','b'=>'fdsfds');
print %a."\n";

2 个答案:

答案 0 :(得分:9)

您正在scalar context打印哈希,方法是将其连接到字符串'\ n'

  

如果在标量上下文中计算哈希值,则在哈希值时返回false   是空的。如果有任何键/值对,则返回true;更多   确切地说,返回的值是一个由数字组成的字符串   用桶和分配的桶数,用a分隔   斜线。

2/8表示已分配 8 存储分区, 2 已被触及。考虑到您已插入 2个值,到目前为止表现良好:)

除了评估哈希函数的运行情况之外,该值显然没有用。使用print %a;打印其内容。

答案 1 :(得分:5)

正如@Dark所说..你在标量上下文中打印哈希。

如果你真的想要打印哈希,那么使用Data :: Dumper

use Data::Dumper;
...
...
print Dumper(%a);

例如:

use Data::Dumper; 
my %hash = ( key1 => 'value1', key2 => 'value2' ); 
print Dumper(%hash); # okay, but not great 
print "or\n"; 
print Dumper(\%hash); # much better

输出:

$VAR1 = 'key2'; 
$VAR2 = 'value2'; 
$VAR3 = 'key1'; 
$VAR4 = 'value1'; 
or 
$VAR1 =    { 
             'key2' => 'value2', 
             'key1' => 'value1' 
           };