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

lka*_*htz 4 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');
Run Code Online (Sandbox Code Playgroud)

tsz*_*ing 9

作者已在文档中解释.

大多数CGI.pm例程接受多个参数,有时多达20个可选参数!为简化此接口,所有例程都使用命名参数调用样式,如下所示:

print $ q-> header(-type =>'image/gif', - expires =>'+ 3d');

每个参数名称前面都有一个破折号.参数列表中的案例和订单都不重要.-type,-Type和-TYPE都是可以接受的.事实上,只有第一个参数需要以破折号开头.如果第一个参数中存在破折号,则CGI.pm假定后续破折号为破折号.

通常只用一个参数调用几个例程.在这些例程的情况下,您可以提供没有参数名称的单个参数.header()恰好是这些例程之一.在这种情况下,单个参数是文档类型.

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


Sin*_*nür 7

perlop:

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