' - '在param中意味着什么
$cgi->start_html(-title => uc($color), -BGCOLOR => $color);
我只知道它在哈希类型中使用,但这是sub中的param。所以它让我很困惑,我搜索了很长时间。
答案 0 :(得分:4)
每当您在Perl中遇到令人困惑的语法时,一个方便的工具就是-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个参数。
但是现在我们有-'title'
和-'BGCOLOR'
,那么字符串的负面是什么?检查perldoc perlop
,我们看到一元减去遵循规则:
'+'
或'-'
开头,则只将字符串的第一个字符切换为相反的符号。'-'
。此处我们有案例3,因此-'title'
为'-title'
而-'BGCOLOR'
为'-BGCOLOR'
。
因此,假设start_html
方法需要一个以键值对形式出现的参数列表,并且键字符串应该以连字符开头。 (它可能会也可能不会在内部使用这些参数来创建哈希,使用类似my %options = @_;
的行。)
这有点迂回,如果你尝试传递像-3zzz => $value
这样的东西,你会得到令人困惑的结果。所以我个人在这里添加明确的引号,以明确传递的是什么,但是继续使用胖逗号来强调参数意味着键/值对:
$cgi->start_html('-title' => uc($color), '-BGCOLOR' => $color);
答案 1 :(得分:3)
这里没有效果。它只是被视为字符串的一部分。我假设CGI.pm的原作者希望使选项看起来更像命令行选项。我认为这是一个糟糕的主意。
答案 2 :(得分:1)
它是一个字符串文字,就像" -title"或" -BGCOLOR"。
答案 3 :(得分:1)
[一元
"-"
...]如果操作数是标识符,则返回由与标识符连接的减号组成的字符串。否则,如果字符串以加号或减号开头,则返回以相反符号开头的字符串。
换句话说,-"foo"
是"-foo"
。
=>
运算符(有时发音为" fat逗号")是逗号的同义词,除非它使得左侧的单词如果以字母开头则被解释为字符串或下划线,仅由字母,数字和下划线组成。
换句话说,foo => 42
是"foo", 42
。
总而言之,这意味着-title => uc($color)
为"-title", uc($color)
。