Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl Isn';这不是数组引用吗?为什么不是';它不是数组引用吗?_Perl_Oop_Perl Data Structures - Fatal编程技术网

Perl Isn';这不是数组引用吗?为什么不是';它不是数组引用吗?

Perl Isn';这不是数组引用吗?为什么不是';它不是数组引用吗?,perl,oop,perl-data-structures,Perl,Oop,Perl Data Structures,我正试图用以下几行代码调试一个令人费解的问题,深入到我继承的一个程序的内部 my $log = []; $root->validate_subtree($log); 导致以下错误 Treex::PML::Node::validate:日志必须是数组引用 $root是一个类型为Treex::PML::Node的对象,这两行实际上是相邻的——我没有遗漏任何内容。我找到了错误消息的来源,并validate_subtree()检查其参数,如下所示(Node.pm第423行): 我以为$log=

我正试图用以下几行代码调试一个令人费解的问题,深入到我继承的一个程序的内部

my $log = [];
$root->validate_subtree($log); 
导致以下错误

Treex::PML::Node::validate:日志必须是数组引用

$root
是一个类型为
Treex::PML::Node
的对象,这两行实际上是相邻的——我没有遗漏任何内容。我找到了错误消息的来源,并
validate_subtree()
检查其参数,如下所示(Node.pm第423行):


我以为
$log=[]
会将
$log
初始化为数组引用!我遗漏了什么?

你是对的。您显示的代码将
$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
实际上是一个数组引用时,会准确地发出咯咯声。我猜你在发行版中发现了一个bug,应该是这样的

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

@MarcB不,这是推荐信。数组应该是
@array
。那应该是
\()
,不是吗?说,我引用:“对匿名数组的引用可以使用方括号创建:
$arrayref=[1,2,A,b,c']];
”@MarcB请删除您的评论。这是完全不准确的,可能会让阅读此页面的人感到困惑。真的吗?我只是假设
isa($log,'ARRAY')
只有在我传递一个真实数组而不是引用时才是真的!但是那只能是一个
@变量
,不是吗…@alexis:
$log
是一个标量变量;它不能是数组,如果(!defined$log | | |!UNIVERSAL::isa($log,'array'))@ysth:我认为从文档()可以看出,
$log
是一个可选参数。所以
undef
很好,但是说
3
{}
就不那么好了。是的,这是可选的。这就是为什么只有在定义了错误检查之后才会发生错误检查。
  if (defined $log and not UNIVERSAL::isa($log,'ARRAY')) {