我是新手。我的问题是密钥(类型,到期名称等)代表什么是“ - ”?为什么不使用普通的哈希表方式并丢弃连字符?
# #!/usr/local/bin/perl -w
use CGI;
$q = CGI->new;
print $q->header(-type=>'image/gif',-expires=>'+3d');
$q->param(-name=>'veggie',-value=>'tomato');
答案 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的方式。