use Tie::File; tie(my @data, 'Tie::File', $fname_in) or die("Unable to open \"$fname_in\": $!\n"); open(my $fh_out, '>', $fname_out) or die("Unable to create \"$fname_out\": $!\n"); for (my $i=@data; $i--; ) { print $fh_out $data[$i]; } untie @data; #### use File::ReadBackwards qw( ); my $fh_in = File::ReadBackwards->new($fname_in) or die("Unable to open \"$fname_in\": $!\n"); open(my $fh_out, '>', $fname_out) or die("Unable to create \"$fname_out\": $!\n"); while (defined(my $line = $fh_in->readline())) { print $fh_out $line; }