Невозможно вызвать метод setValue для неопределенного значения - perl

use strict;
use warnings;
use utf8;
use 5.010;
use HTML::HTML5::Parser;

open (FILE, '<links.txt') ;

my @lines = <FILE>;
my $i;
my $a = $lines[$i];

my $xml = HTML::HTML5::Parser->load_html(location => $a) ;

получил ошибку: «Не удается вызвать метод setValue для неопределенного значения в C:/Dwimperl/perl/site/lib/HTML/HTML5/Parser/TagSoupParser.pm, строка 2946»

Я попытался сначала вставить значение if и определить, но это не сработало.

Я только начинаю изучать Perl, может ли кто-нибудь помочь мне с этим?


person emj    schedule 02.05.2013    source источник
comment
это не компилируется для меня из-за того, что $i не определено. Вам не хватает кода?   -  person dsolimano    schedule 02.05.2013
comment
Код бесполезен без данных, которые вызывают проблему. (Но обязательно обрежьте HTML до минимума, необходимого для генерации ошибки, прежде чем публиковать его!) И это при условии, что ошибка не в коде, который вы на самом деле запустили (а не в бесполезном коде, который вы разместили). Вы не смогли продемонстрировать свою проблему.   -  person ikegami    schedule 02.05.2013
comment
Спасибо за ваш ответ здесь! Итак, проблема для меня в том, что некоторые ссылки генерируют ошибку, а некоторые нет. Я не знаю, является ли это самой ссылкой (я пытался удалить остальную часть кода - как указано выше - и все равно ничего) или html веб-страницы? Как я могу проверить, какие элементы вызывают ошибку - разделить html на несколько частей и разобрать их отдельно?   -  person emj    schedule 02.05.2013
comment
Во-первых, ваш код вообще не должен работать, потому что $i не определено. Если вам нужна помощь с кодом, предоставьте то, что работает. Во-вторых, если у вас возникли проблемы с определенной строкой в ​​links.txt, попробуйте найти ее. Вы можете просто распечатать каждую строку по мере ее обработки, чтобы узнать, какая из них не работает.   -  person mzedeler    schedule 02.05.2013


Ответы (1)


use strict;
use warnings;
use utf8;
use 5.010;
use HTML::HTML5::Parser;
use Try::Tiny;

open (my $FILE, '<', 'links.txt') ;
my @lines = <$FILE>;
my $i = 0;
foreach my $a (@lines) {
    my $xml = try {
        HTML::HTML5::Parser->load_html(location => $a)
    } catch {
        warn "Bad line [$i][$a]";
        warn "Actual error: $_";
    };
    $i++;
}

Я очистил ваш код, исходя из своих лучших предположений о том, как он на самом деле должен быть структурирован, и добавил блок try/catch (используя Try::Tiny), чтобы продемонстрировать метод определения ваших проблемных строк.

Вам нужно определить, какие входные данные вызывают проблему, прежде чем вы сможете действительно диагностировать проблему.

person RickF    schedule 03.05.2013
comment
Я не мог найти, какой элемент html вызвал проблему, но я заглушил ошибки с помощью Try::Tiny на плохих ссылках, и этого более чем достаточно, как по мне. Большое спасибо за вашу помощь! - person emj; 03.05.2013