gpt4 book ai didi

string - 在 Perl 中使用裸字有哪些陷阱?

转载 作者:行者123 更新时间:2023-12-02 06:45:31 26 4
gpt4 key购买 nike

我知道裸词可以用作引用运算符(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

对于散列键来说,裸字在所有情况下都表现得符合预期。要覆盖该行为,我们需要明确消除歧义。

最佳答案

Please exclude use cases where 'use strict' would catch them as errors at compile time.

use strict; 完全阻止使用 barewords 。允许裸词会导致打字错误非常安静和/或巧妙地失败。

文档声称小写裸词可能会被误解为 Perl future 版本中的函数调用,但事实并非如此。需要启用新功能,例如 say

<小时/>

也就是说,我认为您实际上是在谈论自动引用的哈希键。可能会出现混淆,因为人们可能会编写 $hash{foo} 并期望它等于 $hash{foo()}。但 foo (与 foo() 相反)不仅是一种奇怪的调用子方法,而且没有人愿意编写 $hash{ foo()} 首先。 (肯定需要一个参数。)

唯一可以防止代码被误解的可能性无限小是常量被用作散列键的可能性。 $hash{CONSTANT} 会失败。人们需要使用 $hash{(CONSTANT)}$hash{+CONSTANT} 或某种其他形式的消歧形式。

关于string - 在 Perl 中使用裸字有哪些陷阱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41205050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com