Perl 在字符串等式left或right中使用未初始化值?

Perl 在字符串等式left或right中使用未初始化值?,perl,initialization,Perl,Initialization,我正在清理一些代码,我在服务器日志中看到perl错误是 Use of uninitialized value in string eq at ..... 看代码,这行代码是这样的 if ($level1 eq $level2) { #!/usr/bin/perl use warnings; my $a; my $b; if ($a eq $b){ print "...."; } 好的,很公平。我想我的问题是这样的。问题出在$level1还是$level2 我写了一个快速测试,试图

我正在清理一些代码,我在服务器日志中看到perl错误是

Use of uninitialized value in string eq at .....
看代码,这行代码是这样的

if ($level1 eq $level2) {
#!/usr/bin/perl
use warnings;
my $a;
my $b;

if ($a eq $b){
    print "....";
}
好的,很公平。我想我的问题是这样的。问题出在$level1还是$level2

我写了一个快速测试,试图在本地复制它,它看起来像这样

if ($level1 eq $level2) {
#!/usr/bin/perl
use warnings;
my $a;
my $b;

if ($a eq $b){
    print "....";
}
我得到了一个信息量更大的错误

Use of uninitialized value $a in string eq at ./warntest.cgi line 7.
Use of uninitialized value $b in string eq at ./warntest.cgi line 7.
这似乎是不一致的行为。有人有线索吗?
Janie

在perl 5.10中,在警告中添加了哪个变量未定义的指示(在可能的情况下)(非常令人高兴)。您的服务器可能正在使用较旧的perl。

为什么不给出第一个错误行的内容?在没有看到任何内容的情况下,我猜测您正在比较函数调用或哈希/数组值查找的结果。也就是说,它不是一个简单的未定义的、命名为scalar的。如果您收到一个您不理解的警告,您应该使用diagnostics pragma。现在我意识到问题在于警告消息中的差异。BAM!就这样!伊斯特,你又一次启发了我!JW