我刚刚开始一项新工作,其中包括维护一些Perl代码。不幸的是,我是Perl的新手,但我尽力通过书籍和在线搜索所有答案,但无法找到任何答案。我的问题实际上很简单 - 以下几行意味着什么?
my(%input);
my(%query);
我理解"我的(变量列表)"来自不同来源的是声明变量列表,以及%符号是散列,但找不到my (%xxx)
的任何引用。
我浏览了包含此内容的CGI脚本,但未找到对上述两行的任何引用,即%input
或$input
。没有指定模块等。我可以安全地删除这两行吗?
我真的没有想法,所以会很感激任何建议。
答案 0 :(得分:3)
perldoc web site是获取有关Perl信息的最佳位置。随机谷歌搜索Perl信息可以带你到一些正确的狡猾的地方。
my
功能在perlfunc手册页中定义。完整详情为here。
有关如何声明和使用各种类型的Perl变量的详细信息,请参见perldata手册页。
请注意,您的哈希%input
可以称为%input
,$input{key}
或@input{list of keys}
。
我可以安全地删除这两行吗?
如果你尝试会怎么样?或者,不是删除它们,也许只是先将它们注释掉。 Perl注释字符为#
。
更新:试图解释一下我认为这里混淆的真正根源。
正如the documentation中所述,my
采用了一系列变量。所以你看到这样的事情:
my ($foo, @bar, %baz);
它声明了三个变量,一个标量,一个数组和一个哈希。
当然,单个项目列表仍然是一个列表。所以你可以声明一个变量。
my ($foo);
在这种情况下,括号是可选的。你可以从
获得同样的效果my $foo;
但如果您要声明多个变量,则括号是强制性的;
my $foo, @bar, %baz; # This doesn't work
所以,在最初的问题中我们有:
my(%input);
my(%query);
如果是我的代码,我将其写为
my (%input, %query);
但它们中的任何一个与
完全相同my %input;
my %query ;
选择哪种变体并不重要。
还应该注意,对my
的调用通常在赋值运算符的左侧使用,然后使用运算符右侧的值初始化变量。
my ($scalar, $another_scalar, $a_third_scalar) = (1, 10, 100);
这里,两组括号都是必要的。在这两种情况下,它们都用于构建列表。
要明确回答评论中的其他问题:
什么是
my (%input)
声明?
它声明了一个名为%input
的哈希值。哈希最初是空的。
答案 1 :(得分:2)
脚本是否有use strict; use warnings;
?
无论如何,您可以使用parens初始化多个变量。例如,您可以my ($in, $out);
而不是my $in; my $out;
。这通常用于按某种方式对变量进行分组。在这种情况下,你可以省略parens。也许作者将其他一些变量分组并希望在这里指出这两个哈希与其他任何变量组都不相似?
如果您的两个变量再也不会出现,请随意删除这些行。如果你use strict;
(你真正应该做的是什么),你会收到通知,以防它们实际上在以后使用。
P.S。您的哈希值也可以显示为数组符号作为哈希切片,例如@input{$key1, $key2}
。见http://perldoc.perl.org/perldata.html#Slices