为什么Perl CGI模块使用连字符来启动命名参数?

时间:2010-12-22 16:59:12

标签: perl cgi hashtable

我是新手。我的问题是密钥(类型,到期名称等)代表什么是“ - ”?为什么不使用普通的哈希表方式并丢弃连字符?

# #!/usr/local/bin/perl -w
use CGI; 
$q = CGI->new; 
print $q->header(-type=>'image/gif',-expires=>'+3d');
$q->param(-name=>'veggie',-value=>'tomato');

4 个答案:

答案 0 :(得分:9)

作者已经解释过in the documentation

  

大多数CGI.pm例程都接受几个   争论,有时多达20个   可选的!为了简化这一点   接口,所有例程都使用命名   参数调用样式看起来像   这样:

     

打印   $ Q->报头(型=> '图像/ GIF', - 到期=> '+ 3D');

     

每个参数名称前面都有一个   短跑。案件和订单都不重要   在参数列表中。 -type,-Type,   和-TYPE都是可以接受的。在   事实上,只有第一个论点需要   以破折号开头。如果是破折号   出现在第一个论点CGI.pm中   假设后续的破折号   的。

     

通常称为几个例程   只有一个论点。在这种情况下   您可以提供这些例程   没有参数的单个参数   名称。 header()碰巧是其中之一   这些惯例。在这种情况下,   单个参数是文档类型。

     

print $ q-> header('text / html');

答案 1 :(得分:7)

请参阅perlop

  

如果操作数是标识符,则返回由与标识符连接的减号组成的字符串。否则,如果字符串以加号或减号开头,则返回以相反符号开头的字符串。 这些规则的一个影响是-bareword等同于字符串"-bareword" 。 (强调我的)

答案 2 :(得分:2)

这只是较旧的perl参数样式,通常不用于较新的模块。它并没有被完全弃用,它只是一种较旧的风格,基于Perl如何以短划线开头的方式引用您的哈希键。

答案 3 :(得分:0)

我不知道你所说的“普通哈希表”是什么意思。实现CGI :: pm的方式,属性的名称(在大多数情况下)需要以' - '开头,大概是为了能够识别它们。

或者换句话说,CGI :: header识别'type'属性所需的哈希键是'-type'。

这就是定义CGI.pm的方式。