sub shuffle { my $array= shift; my $i; for ($i = @$array; --$i; ) { my $j = int rand ($i+1); next if $i == $j; @$array[$i,$j] = @$array[$j,$i]; } } open(NEW, "A.txt") || die "Opening A.txt: $!" ; # the original file open(FH, ">B.txt") || die "Opening B.txt: $!" ; # shuffle file save in this while () { push(@lines, $_); } @reordered = shuffle(@lines); foreach (@reordered) { print FH $_; } close NEW; close FH;