저는 맨손 단어를 인용 연산자 (q //, qq //), 해시 키 등에서 문자열로 사용할 수 있다는 것을 알고 있습니다. 나는 정신적 기대를 극복 할 수 없어 개인적으로 너무 흥분하지 않았습니다. 리터럴 문자열은 C, C++ 에서처럼 인용해야합니다. 그러나 따옴표로 묶은 문자열과 벌거 벗어진 단어를 혼용하여 사용하려는 경우 런타임시 실수로 단어가 올바르게 작동하지 않는 발에서 나를 실수로 쏘지 않도록해야합니다.Perl에서 맨손으로 단어를 사용하는 데있어서 함정은 무엇입니까?
'use strict'가 컴파일 타임에 오류로 간주되는 사용 사례는 제외하십시오. 나는 항상 '엄격한'모드를 사용하므로 이러한 경우는 걱정하지 않습니다. 예상대로 해시 키에 대하여, 베어 말은 행동하는 것이
$ ./bare_word.pl
constant SIZE:const_size
1. $href->{size}:1
1a. $href->{size()}:2
2. $href->{getsize}:2
3. $href->{SIZE}:LARGE
3a. $href->{(SIZE)}:CONST_SIZE
그것은 나타납니다
#!/usr/bin/perl
use strict;
use constant SIZE => "const_size";
sub size {
return "getsize";
}
my $href = {
size => 1,
getsize => 2,
const_size => "CONST_SIZE",
SIZE => "LARGE",
};
print "constant SIZE:", SIZE, "\n";
print "1. \$href->{size}:", $href->{size}, "\n";
print "1a. \$href->{size()}:", $href->{size()}, "\n";
print "2. \$href->{getsize}:", $href->{getsize}, "\n";
print "3. \$href->{SIZE}:", $href->{SIZE}, "\n";
print "3a. \$href->{(SIZE)}:", $href->{(SIZE)}, "\n";
출력은 : 아래
제공에 대한 답변과 의견에 따라 코드 그림입니다 모든 경우. 동작을 재정의하려면 명시 적으로 모호성을 제거해야합니다.
'q' 또는'qq' 안에 있다면 * 따옴표로 묶어서 bareword라고 부를 수 없습니다. ('q'는 작은 따옴표와 정확히 같고,'qq'는 정확히 따옴표와 같습니다). – ThisSuitIsBlackNot
@ThisSuitIsBlack 아니, 나는 그것의 외관 때문에 q를 맨손으로 부른다. 그리고 예, 런타임 오류에 대해 묻습니다. – Ltf4an
또 다른 예는 [per-are-per-constants-by-their-values]에 나와 있습니다 (http://stackoverflow.com/questions/41094827/where-are-perl-constants-replaced-by-their- 값/41094880 # 41094880). – zdim