2013-03-22 2 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 '으로 시작해야합니다. 그럼에도 불구하고 컴파일하지 않기 때문에 프로그램을 '엄격하게 사용'하여 테스트하지 못했다고 말할 수 있습니다. – Borodin

답변

9

당신은 스칼라 문맥에서 해시를 평가하는 경우 'N \'문자열

로 연결하여 scalar context에 해시를 인쇄, 그것은 해시 이 비어있는 경우 false를 반환합니다. 키/값 쌍이 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다. more 정확하게 반환 된 값은 사용 된 버킷 수와 할당 된 버킷 수로 구성되며 슬래시로 구분 된 문자열입니다.

2/8는 할당 8 버킷 것을 2 터치 된 것을 의미한다. 값을 2 개만 삽입했다는 것을 고려하면 지금까지 잘 해내 고 있습니다. :)

해시 함수가 얼마나 잘 수행되고 있는지 평가하는 것 외에는 아무런 쓸모가 없습니다. 내용을 인쇄하려면 print %a;을 사용하십시오.

+2

또는'print % a, " \ n ";'. –

+0

@DarkCthulhu : 버킷이 시스템 구성과 관련이 있는지 알고 싶습니다. – baozailove

+0

@baozailove 버킷과 배포본은 사용중인 해쉬 함수에 따라 달라집니다. [here] (http://www.perl.com/pub/2002/10/01/hashes.html) 기본 시스템의 * independent *이어야합니다. –

5

@Dark에서 언급했듯이 스칼라 컨텍스트에서 해시를 인쇄합니다. 당신이 정말로 해시를 인쇄하려면

, 다음 예에 대한 데이터 :: 덤퍼

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

관련 문제