큰 따옴표로 묶어서 %s
을 존재하지 않는 해시로 보간해야합니다.이 값은 유효한 Perl이며 "confusing = true"
을 출력합니다.
my $what = "confusing = $s";
큰 따옴표로 묶어서 %s
을 존재하지 않는 해시로 보간해야합니다.이 값은 유효한 Perl이며 "confusing = true"
을 출력합니다.
my $what = "confusing = $s";
"%s
은 존재하지 않는 해시로 보간되어야 함"하지만 그렇게해서는 안됩니다. 해시 보간은 없습니다. Perl 6에서도 가능합니다.
당신은 형식 지정 및 printf
에 값을 전달하고 있으며, : $ s는 존재하지 않기 때문에
#!/usr/bin/perl -w
use strict;
my $what = "confusing = %s";
printf $what, "true";
그러나,이, (예상대로) 유효하지 않습니다 그것은 의도 한대로 행동합니다. 이것은 해시 보간처럼 보일 수 있지만 그렇지 않습니다.
형식 지정자에 대한 자세한 내용은 perldoc -f sprintf
을 참조하십시오. 즉, 형식 지정자의 %s
은 값이 문자열로 보간되어야 함을 나타내며이 효과는 print "confusing = $what"
과 동일합니다.
printf
을 print
으로 바꾸면 %s
은 변수 보간이 아닌 문자 그대로 취해집니다. 결과는 confusing = %s
입니다. printf
에 대한 호출이 아닌 Torkington의 견해가 적용되는 경우입니다.
또한 해시는 큰 따옴표로 보간되지 않습니다. 스칼라 (해시 요소 포함) 및 배열이 있습니다.
매우 관련 : http://stackoverflow.com/questions/6731291/why-doesnt-perl-support-interpolation-of-hashes-in-double-quotes – pilcrow
고마워요. 나는 Nathan Torkington의 견적을 대답으로 받아 들일 것이다. "큰 문제는 %가 printf가있는 큰 따옴표로 묶인 문자열에 많이 사용된다는 것입니다." –
@pilcrow 관련 없음; 이것은'printf'에 대한 호출이며'% s'가 의심스럽고 Torkington의 지시가 적용되는'print'에 대한 호출이 아니라 정의 된 방식으로 형식 문자열에서'% s'를 처리합니다. –