为什么perl会抱怨不同类型警告的不同行?

Tim*_*Tim 4 perl warnings

Perl通常会抱怨实际错误的行,例如,当一个变量只使用一次时:

use warnings;
if ( 0 ) {
} elsif ( $test ) { } # line 3
# Name "main::test" used only once: possible typo at testt.pl line 3.
Run Code Online (Sandbox Code Playgroud)

这对使用未初始化的警告不起作用$_:

use warnings;
if ( 0 ) { # line 2
} elsif ( chomp ) { }
# Use of uninitialized value $_ in scalar chomp at testt.pl line 2.

use warnings;
if ( 0 ) { # line 2
} elsif ( m/test/ ) { }
# Use of uninitialized value $_ in pattern match (m//) at testt.pl line 2.
Run Code Online (Sandbox Code Playgroud)

是什么导致这个?这种行为何时有用?

yst*_*sth 7

perldoc perl5101delta:

elsif内警告的行号现在是正确的.

请注意,此更改仅影响elsif; 您仍会看到运行时错误/警告给出语句的开头或结尾行号而不是违规代码的实际行:

$ perl
use warnings;
0 ? do {
} : $test ? do {
} : do { };

0 ? do {
} : chomp() ? do {
} : do { };
Name "main::test" used only once: possible typo at - line 3. # correct
Use of uninitialized value $_ in scalar chomp at - line 8.   # incorrect
Run Code Online (Sandbox Code Playgroud)