什么理由使用' - '签入perl哈希密钥名称?

时间:2015-08-29 09:42:29

标签: perl hash

在一些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)配置摘要:

这是否意味着旧模块现在已损坏?

2 个答案:

答案 0 :(得分:7)

这是一件历史文物。对其函数使用hash-key参数约定的第一个主要模块之一是Perl / Tk,它从TCL / Tk(它移植自来自)的密钥上引入了初始破折号命名约定。它传播并且很受欢迎。在我们使用“胖逗号”(=>)运算符之前,它有助于将键名和它们的参数区分开来。除了个人品味之外,今天没有理由使用它。

答案 1 :(得分:1)

这是一个惯例。类似于程序可以从命令行中获取的选项,例如' ls -l'。许多Perl程序员在将参数传递给子例程时使用它更加清晰。这样,您的程序更易读,易于维护。