Разве это не ссылка на массив? Почему это не ссылка на массив?
Я пытаюсь отладить загадочную проблему с помощью следующих строк, глубоко в духе программы, которую я унаследовал,
my $log = [];
$root->validate_subtree($log);
приводит к следующей ошибке
Treex::PML::Node::validate: журнал должен быть ссылкой на массив
$root
является объектом типа Treex::PML::Node
и две линии действительно смежны - я ничего не пропустил. Я пошел к источнику сообщения об ошибке, иvalidate_subtree()
проверяет свой аргумент следующим образом (строка 423 Node.pm):
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 ответ
Решение
Ты прав. Код, который вы показали, устанавливает $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')) {