微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于评论和原型的这两个警告在Perl中是什么意思?

我有以下代码
#! /usr/bin/perl

use strict;
use warnings;

################### Start Main ####################
my @startupPrograms = qw(google-chrome thunderbird skype pidgin );
my @pagesToBeOpenedInChrome = qw(http://www.google.com/ https://stackoverflow.com/ https://mail.google.com/mail/u/0/#inBox);
main();


#################################################

sub main() {

}

我得到以下警告

[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.

程序工作正常,但我无法理解警告.他们的意思是什么?

解决方法

这个警告:
Possible attempt to put comments in qw() list at ./test.pl line 8.

指指定行的这一部分:

.... https://mail.google.com/mail/u/0/#inBox);
                                 # ---^

#号是Perl中的一个注释,qw()附有一些特殊警告.这不用担心,但在这种情况下它看起来像一个冗余的警告.如果你想修复它,你可以把这个作业放在一个块中,不要使用’qw’的警告.然而,这与词法范围的变量有些笨重:

my @pages;    # must be outside block
{
    no warnings 'qw';
    @pages = qw( .... );
}

我对警告“qw”的有用性有些疑问,而在一个小脚本中,您可以通过在脚本的顶部添加任何警告“qw”来全局删除编译指示.

这个警告:

main::main() called too early to check prototype at ./test.pl line 9.

这与您的子名称后面的空括号有关.它们表示您希望使用prototypes与您的子例程,并且您的子应该被调用没有args.原型用于使子程序表现得像内置函数,这就是说它不是你真正需要担心的事情,几乎在所有情况下都应该忽略.所以只需删除空的括号.

如果你真的希望使用原型,你需要将一个预声明或者子声明本身放在你打算使用的地方之前.例如.

sub main ();  # predeclaration

main();

sub main () {
}

原文地址:https://www.jb51.cc/Perl/171611.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐