在一些perl模块中,我看到了代码:
if (exists $h->{Location}) {
%args = (%args, -Status => 302);
}
为什么作者使用-Status
而不只是Status
?
当我必须使用' - '签名哈希键名称时,为什么我会破解自己的模块?
UPD
阅读答案似乎它们必须相同,但它们不是
my $a = { -status => 'a', status => 3, };
print $a->{ status }, $a->{ -status };
print pp $a;
输出的
3a{ -status => "a", status => 3 }
我的perl5(修订版5版本20颠覆2)配置摘要:
这是否意味着旧模块现在已损坏?
答案 0 :(得分:7)
这是一件历史文物。对其函数使用hash-key参数约定的第一个主要模块之一是Perl / Tk,它从TCL / Tk(它移植自来自)的密钥上引入了初始破折号命名约定。它传播并且很受欢迎。在我们使用“胖逗号”(=>
)运算符之前,它有助于将键名和它们的参数区分开来。除了个人品味之外,今天没有理由使用它。
答案 1 :(得分:1)
这是一个惯例。类似于程序可以从命令行中获取的选项,例如' ls -l'。许多Perl程序员在将参数传递给子例程时使用它更加清晰。这样,您的程序更易读,易于维护。