我想知道以下代码为什么要打印“2/8”。
#!/usr/bin/perl
#use strict;
#use warnings;
%a = ('a'=>'dfsd','b'=>'fdsfds');
print %a."\n";
答案 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'
};