这不是数组引用吗?为什么它不是数组引用?

时间:2015-10-22 20:05:44

标签: perl oop perl-data-structures

我试图通过以下几行调试一个令人费解的问题,深入我已经继承的程序,

my $log = [];
$root->validate_subtree($log); 

导致以下错误

  

Treex :: PML :: Node :: validate:log必须是ARRAY引用

$rootTreex::PML::Node类型的对象,并且两条线确实相邻 - 我没有留下任何东西。我转到错误消息的来源,validate_subtree()检查其参数如下(Node.pm第423行):

sub validate_subtree {
  my ($node, $log) = @_;
  if (defined $log and UNIVERSAL::isa($log,'ARRAY')) {
    croak __PACKAGE__."::validate: log must be an ARRAY reference";
  }

我认为$log = [] $log初始化为数组引用!我错过了什么?

1 个答案:

答案 0 :(得分:5)

你是对的。您显示的代码会将$log设置为数组引用。这段代码:

sub validate_subtree {
  my ($node, $log) = @_;
  if (defined $log and UNIVERSAL::isa($log,'ARRAY')) {
    croak __PACKAGE__."::validate: log must be an ARRAY reference";
  }
$log实际上是一个数组引用时,

正好呱呱叫。我猜你在发行版中发现了一个错误,它应该是

  if (defined $log and not UNIVERSAL::isa($log,'ARRAY')) {