Perl:“ - ”在perl中意味着什么

时间:2017-09-20 03:53:37

标签: perl

' - '在param中意味着什么

$cgi->start_html(-title => uc($color), -BGCOLOR => $color);

我只知道它在哈希类型中使用,但这是sub中的param。所以它让我很困惑,我搜索了很长时间。

4 个答案:

答案 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

这里有三个不同之处:

  1. 引号已添加到titleBGCOLOR
  2. =>运算符已更改为逗号。
  3. 括号从uc($color)消失。
  4. 前两个是=> ("fat comma")运算符的正常效果:它等同于逗号,除了左边的东西是标识符(以字母或下划线开头,只包含字母数字字符和下划线) ),该标识符成为带引号的字符串。

    在这种情况下,uc之后的括号并不是绝对必要的,因为内置函数uc的原型是0或1个参数。

    但是现在我们有-'title'-'BGCOLOR',那么字符串的负面是什么?检查perldoc perlop,我们看到一元减去遵循规则:

    1. 如果操作数是数字或数字的字符串表示,则算术否定。
    2. 否则,如果字符串以'+''-'开头,则只将字符串的第一个字符切换为相反的符号。
    3. 否则,如果字符串以字母开头,则在字符串的开头添加'-'
    4. 否则,尝试将字符串转换为数字,如果启用了警告,可能会打印警告,然后进行算术否定。
    5. 此处我们有案例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)

perldoc perlop

  

[一元"-" ...]如果操作数是标识符,则返回由与标识符连接的减号组成的字符串。否则,如果字符串以加号或减号开头,则返回以相反符号开头的字符串。

换句话说,-"foo""-foo"

  

=>运算符(有时发音为" fat逗号")是逗号的同义词,除非它使得左侧的单词如果以字母开头则被解释为字符串或下划线,仅由字母,数字和下划线组成。

换句话说,foo => 42"foo", 42

总而言之,这意味着-title => uc($color)"-title", uc($color)