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; } #### Administrator@LIFEBOOK ~/prg/games-go-kgs : perl simple-case.pl 1 potential games at simple-case.pl line 16. 1 viewable games at simple-case.pl line 32. pre_colspan has 6 td elems at simple-case.pl line 49. @0.1.0.0 (IMPLICIT) @0.1.0.0.0 @0.1.0.0.0.0 "Yes" @0.1.0.0.1 @0.1.0.0.1.0 "metaperl [11k]" " (" @0.1.0.0.1.2 "shygost [-]" " vs. " @0.1.0.0.1.4 "metaperl [11k]" ")" @0.1.0.0.2 "19×19 " @0.1.0.0.3 "4/1/09 3:20 AM" @0.1.0.0.4 "Review" @0.1.0.0.5 "Unfinished" post_colspan has 6 td elems at simple-case.pl line 54. @0.1.0.0 (IMPLICIT) @0.1.0.0.0 @0.1.0.0.0.0 "Yes" @0.1.0.0.1 "a" @0.1.0.0.2 "b" @0.1.0.0.3 "19×19 " @0.1.0.0.4 "4/1/09 3:20 AM" @0.1.0.0.5 "Review" @0.1.0.0.6 "Unfinished" Administrator@LIFEBOOK ~/prg/games-go-kgs :