my $frame = 10; my @buffer; $, = ' '; $\ = "\n"; while (<>) { my @row = split; if (@buffer and ($buffer[-1][0] < $row[0]) ^ ($buffer[-1][1] < $row[1]) ) { pop @buffer; } else { print @{shift @buffer} if $frame < push @buffer, \@row; } } print @$_ for @buffer