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')) {