in reply to reading a random line from a file

The two major methods :-

Prefetch the line locations and then randomly pick one has an even distribution so the chance of picking a short like is the same as a long line.

Randomly picking a possition and moving to the head/end of the current record will be distorted by the length of the record. Longer records will have a higher probability o being picked than short records.

However you can combine the methods if you are using fixed length records.

my $record_length=200; # set the record length open my $fh,'<',$filename or die $!; # open handle my $size = -s $fh; # get the file size my $records=$size/$record_length; # workout the number of records seek $fh, rand($records)*$record_length, 0;# move to a random record my $randomline = <$fh>; # read that record close $fh; # Close handle
Technically ypu should lock the file so it does not change beween getting its length and getting the random record but generally that is not a massive issue. Hope this helps

UnderMine