2013-05-02 1 views
0
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) ; 

는 오류가 발생했습니다 : C에서 정의되지 않은 값에 "setValue에"방법을 호출 할 수 없습니다 ":/Dwimperl/펄/사이트/lib 디렉토리/ HTML/HTML5/Parser/TagSoupParser.pm 라인 2946 "정의되지 않은 값에 방법 "setValue의"를 호출 할 수 없습니다 펄

먼저 if를 삽입하고 값을 정의하려고했지만 작동하지 않습니다.

저는 Perl을 배우기 시작했습니다. 누구나 이걸 도와 줄 수 있습니까?

+3

'$ i' 정의되지 않아서 컴파일되지 않습니다. 코드가 누락 되었습니까? – dsolimano

+3

문제를 일으키는 데이터가 없으면이 코드는 쓸모가 없습니다. (하지만 HTML을 게시하기 전에 오류를 생성하는 데 필요한 최소 크기로 줄이십시오!) 그리고 오류가 실제로 실행 한 코드에 없다고 가정 할 때 (사용자가 게시 한 쓸모없는 코드가 아닌). 문제를 설명하지 못했습니다. – ikegami

+0

답장을 보내 주셔서 감사합니다! 그래서 저를위한 문제점은 몇몇 링크가 오류를 생성하고 어떤 것은 그렇지 않다는 것입니다. 그것이 링크 자체인지는 모르겠다. (나는 나머지 코드를 제거하려고 노력했다. 위와 마찬가지로 - 여전히 아무것도 아니다.) 또는 웹 페이지의 html을 알아 냈다. 어떤 요소가 오류를 생성하는지 확인하려면 어떻게해야합니까? html을 몇 조각으로 분할하고 따로 구문 분석 할 수 있습니까? – emj

답변

0
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::Tiny 사용) try/catch 블록을 추가했습니다.

실제로 문제를 진단하기 전에 어떤 입력이 문제를 일으키는 지 식별해야합니다.

+0

html의 어떤 요소가 문제를 일으켰는지 찾을 수는 없지만 Try :: Tiny 링크가 "나쁜"링크로 인해 오류를 침묵 시켰으며 그 이상으로 충분합니다. 도와 주셔서 감사합니다. – emj