2013-06-27 2 views
1

HTML :: TagParser와 책의 바코드를 사용하여 책의 페이지를 가져 와서 특정 범위를 잡고 다른 페이지에 대해 반복 한 다음 추가하는 프로그램이 있습니다. 그것을 내보낼 때까지 TK :: MListbox에 저장합니다. 이것은 Eclipse에서 완벽하게 작동합니다. 그러나 일단 패커와 함께 .exe가 만들어지면 프로그램이 작동하지 않습니다.URI :: 반입시 실패 가져 오기

#!/user/bin/perl 
use strict; 
use warnings; 
use Tk; 
use Tk::MListbox; 
use LWP::Simple; 
use URI::Fetch; 
use Encode::Byte; 
use HTTP::Response; 
use HTML::TagParser; 
use Spreadsheet::WriteExcel; 

my ($callNumber, $title, $html, $numItems); 
my $savetypes = [['Excel Files', '.xls'], ['Comma-Separated Files', '.csv'], ['Text Files', '.txt']]; 
my $mw = new MainWindow; 
$mw->title("Barcode Lister"); 
$mw->Label(-text=>'Choose Books')->grid(-row=>1, -column=>1, -columnspan=>2, -pady=>10); 
my $barcode = $mw->Entry(-width=>50)->grid(-row=>2, -column=>1, -pady=>5, -padx=>[5, 10]); 
my $add = $mw->Button(-text=>'Add Record', -command=>\&addBook, -width=>15)->grid(-row=>2, -column=>2, -pady=>5); 
my $listFrame = $mw->Frame(-bd=>2, -relief=>"sunken")->grid(-row=>3, -column=>1, -padx=>[5, 10], -pady=>5); 
my $list = $listFrame->Scrolled(qw(MListbox -background white -scrollbars oe))->pack(-expand=>1, -fill=>"both"); 
$list->columnInsert('end', -text=>"Call number", -width=>23); 
$list->columnInsert('end', -text=>"Title", -width=>25); 
my $delete = $mw->Button(-text=>'Delete Record', -command=>\&removeBook, -width=>15)->grid(-row=>3, -column=>2, -pady=>5); 
my $export = $mw->Button(-text=>'Export List', -command=>\&exportList, -width=>15)->grid(-row=>4, -column=>1, -columnspan=>2, -pady=>5); 
$barcode->bind('<Return>'=>\&addBook); 
$barcode->focus; 

MainLoop; 

sub addBook{ 
    $html = HTML::TagParser->new('https://i-share.carli.illinois.edu/uis/cgi-bin/shelflister.cgi?search=s1&bcs=' . $barcode->get() . '&bce=&stpt=1&mode=1'); 
    $title = $html->getElementsByClassName('listLine'); 
    if (ref $title){ 
     $html = HTML::TagParser->new('https://i-share.carli.illinois.edu/uis/cgi-bin/shelflister.cgi?search=s1&bcs=' . $barcode->get() . '&bce=&stpt=1&mode=2'); 
     $list->insert("end", [$title->innerText(), $html->getElementsByClassName('listLine')->innerText()]); 
     $barcode->delete(0, 'end'); 
    } 
    else{ 
     $mw->messageBox(-title=>'Error', -message=>"Barcode not found.", -type=>'Ok', -icon=>'error', -default=>'ok'); 
    } 
} 

누구든지 내가이 .exe 인으로 작동시킬 수있는 방법에 대한 아이디어를 가지고 :

Tk::Error: URI::Fetch failed: https://i-share.carli.illinois.edu/uis/cgi-bin/shelflister.cgi?search=s1&bcs=31412007436751&bce=&stpt=1&mode=1 at script/ShelfLister_Lister.pl line 32. 
Carp::croak at C:/strawberry/perl/lib/Carp.pm line 100 
HTML::TagParser::fetch at HTML/TagParser.pm line 261 
HTML::TagParser::new at HTML/TagParser.pm line 239 
main::addBook at script/ShelfLister_Lister.pl line 32 
<Key-Return> 
(command bound to event) 

관련 프로그램 코드는 이것이다 : 바코드 31412007436751을 사용하여 오류이 무엇입니까?

답변

1

아마도 URI::Fetch->errstr은 실패에 대한 자세한 정보를 제공합니다. HTML :: TagParser (https://rt.cpan.org/Ticket/Display.html?id=86698 참조)를 패치하거나 HTML :: TagParser 관련 코드 줄을 eval { }에 랩핑하고 errstr 함수를 오류가 발생하면 직접 호출 할 수 있습니다.

+0

죄송합니다. 거의 1 년 후에 다시 돌아 오셔서 죄송합니다. 실제로 더 많은 오류 정보를 얻으려면 제가해야 할 일에 실제로 답변했습니다. 감사. – user1583044