perl 中的 "once" 警告是什么?
What is the "once" warnings in perl?
我有代码,
no warnings 'once';
正在阅读 man warnings
我没有看到 /once/
这是做什么的?
只要你没有打开 strict
,perl 允许你使用一个变量而不用声明它。
perl -wE'$foo = 4;'
哪个输出,
Name main::foo
used only once: possible typo at -e
line 1.
请注意 strict
这甚至是不允许的,
Global symbol $foo
requires explicit package name (did you forget to declare my $foo
?) at -e line 1.
你 可以 禁用警告,而不启用 strict
通过 no warnings "once";
虽然我强烈建议 你只需删除未使用的代码而不是使警告静音。
perl -wE'no warnings "once"; $foo = 4;'
既丑陋又无所作为。
如果你运行以下你会触发警告,加上一点额外的解释:
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
警告适用于符号 table 条目(不是 "my" 词法变量)。如果你在上面添加 -Mstrict
,你将创建一个严格的违规,因为你的变量违反了 strict 'vars'
,它禁止你使用尚未声明的变量,除了引用的包全局变量通过他们的完全合格的名称。如果您使用 our
预先声明 $foo
,则警告消失:
perl -Mdiagnostics -Mwarnings -Mstrict=vars -E 'our $foo=1'
这很好用;它避免了严格违规,并避免了 "once" 警告。所以警告的目的是提醒您使用未声明的标识符,未使用完全限定名称,并且仅使用一次。 objective 是为了帮助防止符号名称中的拼写错误,假设是如果您只使用一次符号名称并且没有声明它,则可能是一个错误。
特殊(标点符号)变量免于此检查。因此,您可以只引用一次 $_
或 $/
而不会触发警告。此外,$a
和 $b
被豁免,因为它们被认为是特殊的,用于 sort {$a <=> $b} @list
;在这样的结构中,它们可能只出现一次,但对相当典型的代码发出警告是没有用的。
您可以在此处的警告层次结构中找到 'once' 警告:perldoc warnings。
中提供了所有诊断简介的列表
我有代码,
no warnings 'once';
正在阅读 man warnings
我没有看到 /once/
这是做什么的?
只要你没有打开 strict
,perl 允许你使用一个变量而不用声明它。
perl -wE'$foo = 4;'
哪个输出,
Name
main::foo
used only once: possible typo at-e
line 1.
请注意 strict
这甚至是不允许的,
Global symbol
$foo
requires explicit package name (did you forget to declaremy $foo
?) at -e line 1.
你 可以 禁用警告,而不启用 strict
通过 no warnings "once";
虽然我强烈建议 你只需删除未使用的代码而不是使警告静音。
perl -wE'no warnings "once"; $foo = 4;'
既丑陋又无所作为。
如果你运行以下你会触发警告,加上一点额外的解释:
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
警告适用于符号 table 条目(不是 "my" 词法变量)。如果你在上面添加 -Mstrict
,你将创建一个严格的违规,因为你的变量违反了 strict 'vars'
,它禁止你使用尚未声明的变量,除了引用的包全局变量通过他们的完全合格的名称。如果您使用 our
预先声明 $foo
,则警告消失:
perl -Mdiagnostics -Mwarnings -Mstrict=vars -E 'our $foo=1'
这很好用;它避免了严格违规,并避免了 "once" 警告。所以警告的目的是提醒您使用未声明的标识符,未使用完全限定名称,并且仅使用一次。 objective 是为了帮助防止符号名称中的拼写错误,假设是如果您只使用一次符号名称并且没有声明它,则可能是一个错误。
特殊(标点符号)变量免于此检查。因此,您可以只引用一次 $_
或 $/
而不会触发警告。此外,$a
和 $b
被豁免,因为它们被认为是特殊的,用于 sort {$a <=> $b} @list
;在这样的结构中,它们可能只出现一次,但对相当典型的代码发出警告是没有用的。
您可以在此处的警告层次结构中找到 'once' 警告:perldoc warnings。
中提供了所有诊断简介的列表