我有包含的代码
no warnings 'once';
阅读man warnings
我看不到/once/
的作用是什么?
答案 0 :(得分:3)
只要您没有打开strict
,perl便允许您使用变量而无需声明。
perl -wE'$foo = 4;'
哪个输出
名称
main::foo
仅使用一次:可能在-e
第1行出现错字。
请注意strict
下的内容,
全局符号
$foo
在-e第1行需要显式的程序包名称(您是否忘记声明my $foo
?)。
您可以禁用警告,而无需通过执行strict
来启用no warnings "once";
尽管我强烈建议您只是删除未使用的代码而不是静默警告
perl -wE'no warnings "once"; $foo = 4;'
看上去既丑陋又什么也不做。
答案 1 :(得分:2)
如果运行以下命令,则会触发警告,外加一些额外说明:
perl -Mdiagnostics -Mwarnings -e '$foo=1'
输出将是:
Name "main::foo" used only once: possible typo at -e line 1 (#1)
(W once) Typographical errors often show up as unique variable names.
If you had a good reason for having a unique name, then just mention it
again somehow to suppress the message. The our declaration is
provided for this purpose.
NOTE: This warning detects symbols that have been used only once so $c, @c,
%c, *c, &c, sub c{}, c(), and c (the filehandle or format) are considered
the same; if a program uses $c only once but also uses any of the others it
该警告适用于符号表条目(不适用于“我的”词汇变量)。如果在上面添加-Mstrict
,则会创建一个严格的违规,因为您的变量违反了strict 'vars'
,该变量禁止您使用未声明的变量,但引用的包全局变量除外用他们的全名。如果您要用$foo
预先声明our
,警告就会消失:
perl -Mdiagnostics -Mwarnings -Mstrict=vars -E 'our $foo=1'
这很好用;它避免了严格的违反,并避免了“一次”警告。因此,警告的目的是提醒您使用未声明的标识符,未使用完全限定的名称以及仅使用一次的标识符。目的是帮助防止符号名称中的拼写错误,该假设是,如果仅使用符号名称一次而未声明它,则可能是错误的。
特殊(标点)变量不受此检查。因此,您只能引用一次$_
或$/
并且不会触发警告。另外,$a
和$b
被豁免,因为它们被认为是特殊的,用于sort {$a <=> $b} @list
中;在这样的结构中,它们可能只出现一次,但对相当典型的代码发出警告并没有用。
您可以在以下位置的警告层次结构中找到“一次”警告:perldoc warnings。
perldoc perldiag中提供了所有诊断性摘要的列表。