2013-08-13 1 views
0

큰 따옴표로 묶어서 %s을 존재하지 않는 해시로 보간해야합니다.이 값은 유효한 Perl이며 "confusing = true"을 출력합니다.

my $what = "confusing = $s"; 
+6

매우 관련 : http://stackoverflow.com/questions/6731291/why-doesnt-perl-support-interpolation-of-hashes-in-double-quotes – pilcrow

+0

고마워요. 나는 Nathan Torkington의 견적을 대답으로 받아 들일 것이다. "큰 문제는 %가 printf가있는 큰 따옴표로 묶인 문자열에 많이 사용된다는 것입니다." –

+0

@pilcrow 관련 없음; 이것은'printf'에 대한 호출이며'% s'가 의심스럽고 Torkington의 지시가 적용되는'print'에 대한 호출이 아니라 정의 된 방식으로 형식 문자열에서'% s'를 처리합니다. –

답변

5

"%s은 존재하지 않는 해시로 보간되어야 함"하지만 그렇게해서는 안됩니다. 해시 보간은 없습니다. Perl 6에서도 가능합니다.

3

당신은 형식 지정 및 printf에 값을 전달하고 있으며, : $ s는 존재하지 않기 때문에

#!/usr/bin/perl -w 
use strict; 

my $what = "confusing = %s"; 
printf $what, "true"; 

그러나,이, (예상대로) 유효하지 않습니다 그것은 의도 한대로 행동합니다. 이것은 해시 보간처럼 보일 수 있지만 그렇지 않습니다.

형식 지정자에 대한 자세한 내용은 perldoc -f sprintf을 참조하십시오. 즉, 형식 지정자의 %s은 값이 문자열로 보간되어야 함을 나타내며이 효과는 print "confusing = $what"과 동일합니다.

printfprint으로 바꾸면 %s은 변수 보간이 아닌 문자 그대로 취해집니다. 결과는 confusing = %s입니다. printf에 대한 호출이 아닌 Torkington의 견해가 적용되는 경우입니다.

4

또한 해시는 큰 따옴표로 보간되지 않습니다. 스칼라 (해시 요소 포함) 및 배열이 있습니다.