「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'
};