Learning about inheritance...

exeunt on 2002-03-20T17:50:50

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;

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;
Updated: Better (updated!) version of this on perlmonks here.


success

TorgoX on 2002-03-20T19:39:04

You forgot to check whether the get() succeeded!

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.