... use HTML::TableExtract qw(tree); ... my @headers = ("Solicitation #", qw(Types Agency)); my $te = HTML::TableExtract->new( slice_columns=> 1, keep_html => 0, # comment next line for "bless-error" headers => \@headers ); $te->parse($HTML); foreach my $ts ($te->tables) { print "======= Table (", join(',', $ts->coords), ") =======\n"; print join("\t", @headers), "\n"; foreach my $row ($ts->rows) { print join("\t", map { $_->as_trimmed_text() } @$row), "\n"; } }