2013-03-22 14 views
5

"2/8"と印刷する理由を知りたいのですが。Perlでハッシュを印刷する

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

厳しい理由と警告はコメントアウトされましたか? – squiguy

+0

@squiguy:コードはテストされています〜 – baozailove

+3

開発、テスト、またはプロダクションにかかわらず、 'use strict'と' use warnings 'を持つすべてのプログラムを常に*起動する必要があります。あなたの言うことにもかかわらず、あなたのプログラムはコンパイルされないので、 'strict strict'を使ってテストすることはできません。 – Borodin

答えて

9

あなたは文字列でそれを連結しscalar contextにハッシュを印刷している「\ n」の

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

2/8が割り当てバケット、がタッチされたことを意味します。 の値がの2つの値しか挿入されていないことを考慮すると、これまでのところうまくいきます。

ハッシュ関数の効果を評価する以外は、明らかに価値がありません。その内容を印刷するにはprint %a;を使用してください。

+2

または 'print%a、 \ n ";'。 –

+0

@DarkCthulhu:バケットがシステム構成と関連しているかどうかを知りたいですか? – baozailove

+0

@baozailoveバケットと配布は使用中のハッシュ関数に依存します。 [ここ](http://www.perl.com/pub/2002/10/01/hashes.html)。それは基礎となるシステムの* independent *であるべきです。 –

5

@Dark ..で述べたように、スカラーコンテキストでハッシュを印刷しています。

あなたが本当にその後、例えばのためのデータ:: 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' 
      }; 
+0

to sarathi:ありがとう! – baozailove

関連する問題