我知道在引用运算符(q//、qq//)、哈希键等中可以将裸词用作字符串。我个人对此并不太兴奋,因为我无法克服对文字的心理期望字符串应该被引用,就像在 C、C++ 中一样。但是,如果我要混合使用带引号的字符串和裸词,我想确保我不会意外地在裸词在运行时无法正常运行的情况下误伤自己。
请排除“use strict”会在编译时将它们作为错误捕获的用例。我总是启用“严格”模式,所以我不关心这些情况。
以下是基于提供的答案和评论的代码说明:
#!/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";
输出:
$ ./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
看来,关于hash keys,在所有情况下,裸词的行为都符合预期。要覆盖该行为,我们需要明确消除歧义。