$comment{$lineno++} = $_; #### push(@lines, { id => $id, line => $_ }); $lineno++; #### @lines = sort { $a->{id} <=> $b->{id} } @lines; for (0..$lineno-1) { if (exists $comment{$_}) { print $comment{$_}; } else { my $x = shift(@lines); print $x->{line}; } } # @lines should be empty at this point