【发布时间】:2017-05-03 11:16:03
【问题描述】:
我知道在引用运算符(q//、qq//)、哈希键等中可以将裸词用作字符串。我个人对此不太感兴趣,因为我无法克服心理预期应该引用文字字符串,如在 C、C++ 中。但是,如果我要混合使用带引号的字符串和裸词,我想确保我不会意外地在裸词在运行时无法正常运行的情况下误伤自己。
请排除“use strict”会在编译时将其捕获为错误的用例。我总是启用“严格”模式,所以我不关心这些情况。
下面是根据提供的答案和cmets的代码说明:
#!/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
似乎对于散列键,裸词在所有情况下的行为都符合预期。要覆盖该行为,我们需要明确消除歧义。
【问题讨论】:
-
如果它在
q或qq内,它被引用,所以你不能称之为裸词。 (q完全等同于单引号,qq完全等同于双引号)。 -
@ThisSuitIsBlackNot,由于它们的外观,我在 q// 中将其称为裸词。是的,我问的是运行时错误。
-
所以...嗯...在您的脑海中,如果不是 quote 它的内容,quoting 运算符会做什么?
-
您的评论“我在
q//中称其为裸词,因为它们的外观” 让我很担心。你能解释一下你对它们的外观的含义,以及它与''和""的外观有何不同?如果您说qw//,我可以开始理解,但即使那是非常不同的东西。我认为你以某种方式误导了自己,我无法遵循你的思路。
标签: string perl quotes bareword