#!/usr/local/bin/perl use warnings; use strict; my @l = <>; die "did not read any input\n" if not @l; print $l[0]; foreach my $i (1 .. $#l - 1) { if ($l[$i] !~ m!^\s*(?:
)?\s*$!) { print $l[$i]; next; } my $prev_nonblank_is_table = 0; foreach (@l[reverse 0 .. $i-1]) { if ((not m!^\s*(?:)?\s*$!) and /\|\s*$/) { $prev_nonblank_is_table = 1; last; } } unless ($prev_nonblank_is_table) { print $l[$i]; next; } my $next_nonblank_is_table = 0; foreach (@l[$i+1 .. $#l]) { if ((not m!^\s*(?:)?\s*$!) and /^\s*\|/) { $next_nonblank_is_table = 1; last; } } unless ($next_nonblank_is_table) { print $l[$i]; next; } # Blank line between two table lines, don't print. } print $l[$#l];