在参数中,'-'代表选项未设置或无效。
$cgi->start_html(-title => uc($color), -BGCOLOR => $color);
我知道它在哈希类型中使用,但这是一个子参数。所以这让我感到困惑,我搜索了很长时间。
$cgi->start_html(-title => uc($color), -BGCOLOR => $color);
我知道它在哈希类型中使用,但这是一个子参数。所以这让我感到困惑,我搜索了很长时间。
-MO=Deparse
选项。这会导致Perl检查脚本的语法并以规范化的形式输出脚本,而不是执行它。perl -MO=Deparse -e '$cgi->start_html(-title => uc($color), -BGCOLOR => $color);'
我得到了一个结果:
$cgi->start_html(-'title', uc $color, -'BGCOLOR', $color);
-e syntax OK
title
和 BGCOLOR
中添加了引号。=>
运算符更改为逗号。uc($color)
消失了括号。=>
("fat comma") 运算符的正常效果:它相当于逗号,只是如果左边的东西是标识符(以字母或下划线开头,只包含字母数字字符和下划线),那个标识符就变成了带引号的字符串。uc
后面的括号在这种情况下并不是严格必要的,因为内置函数 uc
原型化为接受 0 或 1 个参数。perldoc perlop
,我们可以看到一元减遵循以下规则:
start_html
方法期望一个由键值对组成的参数列表,且键字符串应以连字符开头。 (它可能会使用这些参数来创建哈希表,类似于 my %options = @_;
。)这有点绕弯子,而且如果您尝试传递像 -3zzz => $value
这样的内容,结果可能令人困惑。所以我个人会在这里添加明确的引号来表明正在传递什么,但仍然使用大逗号来强调参数应该是键/值对。$cgi->start_html('-title' => uc($color), '-BGCOLOR' => $color);
这里它没有影响,只是被看作字符串的一部分。我猜测 CGI.pm 的原作者想要让选项看起来更像命令行选项,但我认为这是一个很糟糕的想法。
[一元运算符
"-"
...] 如果操作数是一个标识符,则返回一个由减号和标识符组成的字符串。否则,如果字符串以加号或减号开头,则返回一个以相反符号开头的字符串。
换句话说,-"foo"
就是 "-foo"
。
=>
运算符(有时发音为 "fat comma")是逗号的同义词,除了它会导致其左侧的单词被解释为一个字符串,如果它以字母或下划线开头,并且仅由字母、数字和下划线组成。
换句话说,foo => 42
就是 "foo", 42
。
综上所述,-title => uc($color)
就是 "-title", uc($color)
。