start_html(-title => uc($color), -BGCOLOR => $color); 我只知道它用于哈希类型,但这是 sub 中的参数。所以-6ren">
gpt4 book ai didi

Perl :what does "-" means in perl

转载 作者:行者123 更新时间:2023-12-01 04:41:13 25 4
gpt4 key购买 nike

参数中的“-”是什么意思

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

我只知道它用于哈希类型,但这是 sub 中的参数。所以弄得我一头雾水,找了半天。

最佳答案

每当您在 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) 中消失了。

前两个是 => ("fat comma") 的正常效果运算符:相当于逗号,但如果左边的东西是标识符(以字母或下划线开头,只包含字母数字字符和下划线),则该标识符成为带引号的字符串。

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

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

  1. 如果操作数是数字或数字的字符串表示形式,则进行算术否定。
  2. 否则,如果字符串以 '+''-' 开头,则仅将字符串的第一个字符切换为相反的符号。
  3. 否则,如果字符串以字母开头,则在字符串开头添加 '-'
  4. 否则,尝试将字符串转换为数字,如果启用警告,可能会打印警告,然后执行算术否定。

这里我们有案例 3,所以 -'title''-title' 并且 -'BGCOLOR'' -BGCOLOR'.

所以大概 start_html 方法需要一个以键值对形式出现的参数列表,并且键字符串应该以连字符开头。 (它可能会或可能不会在内部使用这些参数来创建哈希,例如 my %options = @_;。)

这有点迂回,而且如果您曾尝试传递类似 -3zzz => $value 的东西,您会得到令人困惑的结果。因此,我个人会在此处添加显式引号以明确传递的内容,但无论如何都要继续使用粗逗号来强调参数是键/值对:

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

关于Perl :what does "-" means in perl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46313017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com