use strict; use warnings; use Data::Dumper; use LWP::Simple; use HTML::TreeBuilder; my $html = 'Yesmetaperl [11k] (shygost [-] vs. metaperl [11k])19×19 4/1/09 3:20 AMReviewUnfinished'; my $tree = HTML::TreeBuilder->new_from_content($html); my $table = $tree->look_down('_tag' => 'table'); my @potential_game = $table->look_down('_tag' => 'tr'); warn scalar @potential_game, ' potential games'; my @viewable_game = grep { my $elem = $_; my $game_link = $elem->look_down(href => qr!files.gokgs.com/games!); if ($game_link) { my $content = ($game_link->content_list)[0]; $content eq 'Yes'; } else { (); } } @potential_game; warn scalar @viewable_game, ' viewable games'; sub fix_colspan { my($td)=@_; my $colspan = $td->attr('colspan'); if (defined($colspan) and $colspan == 2) { my @td = (HTML::Element->new_from_lol( [td => 'a'] ) ); push @td, HTML::Element->new_from_lol( [td => 'b'] ) ; $td->replace_with(@td)->delete; } } for my $game (@viewable_game) { my @td = $game->look_down('_tag' => 'td'); warn 'pre_colspan has ', scalar @td, ' td elems' ; $game->dump; fix_colspan($_) for @td; warn 'post_colspan has ', scalar @td, ' td elems' ; $game->dump; }