我有以下代码
#! /usr/bin/perl
use strict;
use warnings;
################### Start Main ####################
my @startupPrograms = qw(google-chrome thunderbird skype pidgin );
my @pagesToBeOpenedInChrome = qw(http://www.google.com/ http://stackoverflow.com/ https://mail.google.com/mail/u/0/#inbox);
main();
#################################################
sub main() {
}
Run Code Online (Sandbox Code Playgroud)
我得到以下警告
[aniket@localhost TestCodes]$ ./test.pl
Possible attempt to put comments in qw() list at ./test.pl line 8.
main::main() called too early to check prototype at ./test.pl line 9.
Run Code Online (Sandbox Code Playgroud)
程序运行正常,但我无法理解警告.他们的意思是什么?
TLP*_*TLP 14
这个警告:
Possible attempt to put comments in qw() list at ./test.pl line 8.
Run Code Online (Sandbox Code Playgroud)
指的是指定行的这一部分:
.... https://mail.google.com/mail/u/0/#inbox);
# ---^
Run Code Online (Sandbox Code Playgroud)
该#标志是Perl中的注释,qw()并附有一些特殊警告.没什么可担心的,但在这种情况下看起来确实像冗余警告.如果要修复它,可以将赋值括在一个块中并使用no warnings 'qw'.然而,对于词法范围的变量,这有点笨拙:
my @pages; # must be outside block
{
no warnings 'qw';
@pages = qw( .... );
}
Run Code Online (Sandbox Code Playgroud)
我对它的用处有些怀疑warnings 'qw',在一个小脚本中你可以通过no warnings 'qw'在脚本顶部添加来全局删除pragma .
这个警告:
main::main() called too early to check prototype at ./test.pl line 9.
Run Code Online (Sandbox Code Playgroud)
这与您的子名称后面的空括号有关.它们表示你希望在子程序中使用原型,并且应该在没有args的情况下调用sub.原型用于使子例程的行为类似于内置函数,也就是说它不是您真正需要担心的事情,并且几乎在所有情况下都应该忽略.所以只需删除空括号即可.
如果您真的希望使用原型,则需要在您打算使用它的地方之前放置预先声明或子声明.例如
sub main (); # predeclaration
main();
sub main () {
}
Run Code Online (Sandbox Code Playgroud)
zou*_*oul 12
在第一个警告Perl抱怨引用运算符中的哈希:
my @foo = qw(foo bar #baz);
Run Code Online (Sandbox Code Playgroud)
这里哈希是最后一个URL的一部分,Perl认为你可能想在那里发表评论.您可以通过明确引用项目来消除警告:
my @foo = (
'first URL',
'second URL',
'and so on',
);
Run Code Online (Sandbox Code Playgroud)
它也更具可读性恕我直言,该qw(…)结构更适合更简单的列表.
第二个警告有点奇怪,因为Perl显然知道sub,否则它不会抱怨.无论如何,你可以删除()子定义中的部分,一切都会好的:
sub main {
}
Run Code Online (Sandbox Code Playgroud)
在()这里做别的事情比你想象的,它并不需要定义一个简单子.(这是一个子原型,很可能你不想使用它.)顺便说一下,根本不需要main在Perl中声明一个 sub,只需转储你需要的代码而不是子定义.
| 归档时间: |
|
| 查看次数: |
721 次 |
| 最近记录: |