@ary = ( [1,2], [2,3], [3,3] #other data ) #### #!/usr/bin/perl use warnings; use strict; my @ary= map { chomp; [split] } split /\n/, <[1] != 0) { if (@buffer >= $xmax) { push @result, @buffer; @buffer = (); } if (@buffer && $lasty != $pair->[1]) { push @result, @buffer; @buffer = (); } if (@buffer && $lasty == $pair->[1]) { push @result, map { [$_->[0], $lasty] } @buffer; @buffer = (); } $lasty = $pair->[1]; push @result, $pair; next; } push @buffer, $pair; } print join "\n", map { "@$_" } @result; print "\n";