我想知道下面的代码为什么打印“2/8”。
#!/usr/bin/perl
#use strict;
#use warnings;
%a = ('a'=>'dfsd','b'=>'fdsfds');
print %a."\n";
您通过将其与字符串 '\n' 连接来在标量上下文中打印哈希
如果您在标量上下文中评估哈希,则如果哈希为空,则返回 false。如果有任何键/值对,则返回 true;更准确地说,返回的值是一个字符串,由已使用的桶数和分配的桶数组成,用斜杠分隔。
2/8
表示在分配的8个桶中,有2 个已被触及。考虑到您只插入了2 个值,到目前为止它做得很好:)
该值显然没有用,除了评估散列函数的表现如何。用于print %a;
打印其内容。
正如@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'
};