Brought on by laziness, of having to get the web page into a variable, and then create the object for HTML::TokeParser, I knew there had to be a better way, while reading Object Oriented Perl, I decided to give it a try. Some of the items I want to change is to check for errors, and to allow files or actual html data passed to new(), not just a url, but that is just icing on the cake.
package HTML::TokeParser::URL;
use strict;
use warnings;
Updated: Better (updated!) version of this on perlmonks here.
BEGIN {
use HTML::TokeParser;
use LWP::Simple qw(get);
our @ISA = qw(HTML::TokeParser);
}
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
my $page = get(shift);
my $self = HTML::TokeParser->new(\$page);
bless ($self, $class);
return $self;
}
1;
In LWP OO terms:
use LWP;
my $resp = LWP::UserAgent->new->get($url);
die "GRAH! ", $resp->status_line unless $resp->is_success;
... HTML::TokeParser->new( $resp->content_ref )
Re:success
exeunt on 2002-03-20T19:59:31
I get this now (with your modifications):
Can't locate object method "get" via package "LWP::UserAgent"
(perhaps you forgot to load "LWP::UserAgent"?) at HTML/TokeParser/URL.pm line 18.
Re:success
TorgoX on 2002-03-20T20:55:05
Upgrade your LWP!Re:success
exeunt on 2002-03-20T21:41:46
This is on a windows machine, ActivePerl 631. In PPM I see no where to update LWP/libwww-perl. In PPM3 it shows libwww-perl 5.51 as up to date.
I guess I could manualy upgrade it manualy.
I did check this on a FreeBSD box, and it works! Thanks for the suggestion.
Re:success
TorgoX on 2002-03-20T21:52:07
Or just do $browser->request(HTTP::Request->new(GET=>$url)) instead of $browser->get($url)Re:success
exeunt on 2002-03-20T22:00:37
I like this approch, since it will now work on older versions of LWP. (In a perfect world backward compatibility would not be known).
Thanks for your help.Re:success
TorgoX on 2002-03-20T22:07:57
I shouldn't pass up this chance to say that there are certain security problems with older LWP dists; but if you just don't use them in a CGI, you're fine.