#!/usr/local/bin/perl use warnings; use strict; my $in_table = 0; my $tr; my $td; my @l = <>; chomp @l; s!(?(?:table|td|tr))!\n$1!gi foreach @l; @l = map { "$_\n" } map { split /\n/ } @l; foreach my $i (0 .. $#l) { local $_ = $l[$i]; local $SIG{__DIE__} = sub { chomp (my $msg = shift); die "$ARGV:$msg, line is: $l[$i]"; }; if (s/
| ]*>//i) { die " | outside |
| inside another\n" if defined $td; $td = ''; } my $end_td = s! | ]*>!!i; if (defined $td) { s!?[pP][^>]*>!!g; s/ / /g; s/^\s+//; s/\s+$//; $td .= ' ' if length $td; $td .= $_; } else { print "$_\n"; } if ($end_td) { die "mismatched \n" if not defined $td; push @$tr, $td; undef $td; } } die "$ARGV:EOF inside\n" if defined $td; die "$ARGV:EOF inside |