2013-12-22 2 views
2

모든 간단한 Perl 코드는 이해하지만 이해할 수 없습니다. 여기Perl print % hash - 이것을 이해하는 데 도움이 필요합니다.

우리는

#!/usr/bin/env perl 
use warnings; 
use strict; 
my %hash; 
$hash{"key"} = "value"; 
$hash{"key2"} = "value2"; 
$hash{"key3"} = "value3"; 
print %hash."\n"; 

이동 그리고 결과는 내가 그 결과가 key3value3key2value2keyvalue1

없음 예상되는 ."\n" 제거한 경우, 결과는 2/8

하나 KEP => 값 쌍을 제거 3/8입니다 이것을하는 이유는,이 accidentlly 다만 일어나고있는 무슨을 이해하는 것을 시도하는주의했다.

+3

당신이 이미 데이터 인식하지 use warnings; (또는 "새로운"기능의 수에 전환 펄 -E,에서 실행 될) 것 같은 use feature 'say';해야합니다 : : Dumper는 데이터 구조를 덤프 할 필요가있을 때 유용합니다 :'Use Data :: Dumper; 프린트 Dumper \ % hash;'. – Chris

+1

나는 내가 의견을 upvote 수 있기를 바랍니다. 덤퍼, ftw. – chooban

답변

7

"\ n"을 해시에 추가하면 해시를 스칼라 컨텍스트로 강제 삽입하여 현재 용량 및 크기를 출력합니다. 제거하면 해시가 목록 컨텍스트에서 보간되고 현재 키/값 쌍이 출력됩니다.

+1

그것은 빠르고 감사했습니다. –

+4

특히 "\ n"이 아닙니다. 해시를 스칼라 문맥을 제공하는'.' 연산자의 피연산자로 제공합니다. – ysth

+0

ysth가 지적했듯이 문제를 일으키는 연결입니다 (이를 지적 해 주셔서 고맙습니다). 예상되는 결과를 생성하는 하나의 연결 문자열, 즉'print % hash "\ n"; "에 반대되는 print 함수에 여러 인수를 제공하는 것이 더 나을 것입니다. – Chris

3

Mark는 여기에서 어떤 일이 벌어지고 있는지 완전히 이해하고 있지만 "say % hash;"를 사용하여 해시를 스칼라 컨텍스트로 변환하지 않고 의도 한 결과를 얻을 수 있습니다. 5.10부터 perl 버전까지.

당신은 당신이 경우

관련 문제