while (my $line = ) { $line =~ s{(z0)}{fi$1}g; # $line =~ s{(?<=^)\n\Z}{fi\n}g; if ($line =~ /^fi/) { # line starts with a bracket if (@unsorted_input) { # if array has entries # my @sorted = sort two_way_sort @unsorted_input; print @unsorted_input; undef @unsorted_input; } print {Output} $line; # print the header line } else { # line is an entry line my @sorted = sort two_way_sort @unsorted_input; push @unsorted_input, $line; } } foreach my $line (@unsorted_input) { print Output $line; }