【发布时间】:2016-01-07 07:18:03
【问题描述】:
为什么会出现以下代码:
use strict;
use warnings;
no warnings 'uninitialized';
use Data::Dumper;
my $user;
my @data = @{$user->{ENTERPRISE}}; # Error on this line
print Dumper($user), qq{Done!\n};
抛出错误“Can't use an undefined value as an ARRAY reference”,而下面的代码:
use strict;
use warnings;
no warnings 'uninitialized';
use Data::Dumper;
my $user;
foreach my $enterprise(@{$user->{ENTERPRISES}}) {
print qq{Enterprise:}, $enterprise;
}
print Dumper($user), qq{Done!\n};
不抛出任何东西,而是返回:
$VAR1 = {
'ENTERPRISES' => []
};
Done!
两者都有违规代码,但只有一个抛出错误。
可能的答案: Perl's autovivification?
我在正确的轨道上吗?感谢您的意见。
【问题讨论】:
-
你到底想做什么?您已关闭警告以执行此操作这一事实应该是一个非常好的警告,这不是一个好主意。
-
我只是想弄清楚 Perl 是如何将错误抛出到一个地方而不是另一个地方的相同代码位。第一个代码块来自抛出错误并且必须修复的旧代码,而第二个代码块是更新的代码,我担心也需要修复,但我想不需要,因为它没有抛出我看到的错误过去。