Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: Re: Re: Re: How to get HTML::Parser to return a line of parsed text

by davorg (Chancellor)
on Feb 06, 2001 at 21:03 UTC ( #56701=note: print w/ replies, xml ) Need Help??


in reply to Re: Re: Re: How to get HTML::Parser to return a line of parsed text
in thread How to get HTML::Parser to return a line of parsed text

You need to pass a reference to an array. I'd probably declare @array first and then use \@array, but merlyn has done both in one step (I didn't know you could do that - never too old to learn new stuff I suppose!)

map is an operator that takes a block of code and an array. It runs (and returns the results of running) the block of code once for each element in the array. Each element is aliased to $_ within the block.

When you pass an array ref, instead of a sub ref, to HTML::Parser->new it will store all of the values that would have been parameters to the handler, in the array. In our case it's just one value ('text') but it could well be more. Because of that, the array is in fact an array of arrays (or, more accurately, an array of array references).

Therefore each time the map block is called, $_ contains a reference to a one-element array and $_->[0] contains the value of the first (and only) element in that array. The whole map call returns the complete list of these elements, effectively flattening the array to one dimension.

Does that make it clearer?

--
<http://www.dave.org.uk>

"Perl makes the fun jobs fun
and the boring jobs bearable" - me


Comment on Re: Re: Re: Re: How to get HTML::Parser to return a line of parsed text
Re: Re: Re: Re: Re: How to get HTML::Parser to return a line of parsed text
by merlyn (Sage) on Feb 06, 2001 at 21:21 UTC
    You can use my any place that you can have an lvalue, and it remains an lvalue. I've been using that more and more in my programs, and it's been pretty slick.

    -- Randal L. Schwartz, Perl hacker

      Slick is as slick does.
      use HTML::Parser; use LWP::Simple qw(get); my $html = get("http://anime.com"); my @accum = (); my $parser = HTML::Parser->new( text_h => [\@accum, "text"] ); $parser->parse( $html ); for (@accum) { print $_->[0]; }
      :P

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://56701]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (12)
As of 2014-09-18 17:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (120 votes), past polls