5

「2/8」を出力する理由を次のコードで知りたいです。

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

2 に答える 2

9

ハッシュを文字列 '\n' と連結することにより、スカラー コンテキストでハッシュを出力しています

スカラー コンテキストでハッシュを評価すると、ハッシュが空の場合は false が返されます。キーと値のペアがある場合は true を返します。より正確には、返される値は、使用されたバケットの数と割り当てられたバケットの数をスラッシュで区切った文字列です。

2/8割り当てられた8 つのバケットのうち、 2 つが処理されたことを意味します。値を 2 つしか挿入していないことを考えると、これまでのところうまくいっています :)

この値は、ハッシュ関数がどれだけうまく機能しているかを評価する場合を除いて、明らかに役に立ちません。print %a;その内容を印刷するために使用します。

于 2013-03-22T06:16:28.727 に答える
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' 
           };
于 2013-03-22T06:21:29.743 に答える