Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

exeunt (319)

exeunt
  reversethis-{ten.xyz} {ta} {izaguf}

My perlmonks Personal Node [perlmonks.org]

Journal of exeunt (319)

Wednesday March 20, 2002
12:50 PM

Learning about inheritance...

[ #3677 ]

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.

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • 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 ) ...

    • 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.

      • Upgrade your LWP!
        • 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.
          • Or just do $browser->request(HTTP::Request->new(GET=>$url)) instead of $browser->get($url)
            • 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.
              • 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.