I realize this is not at all portable, but one could use
the
wc -l *nix command to get the total number of
lines, pick from that number randomly, then open
the file and
while until you get to that
line. You could even use
File::ReadBackwards if
the random line is in the second half of the file.
Come to think of it, if you are already willing to
use wc, you could also use tail and head thusly:
$line = `tail +N | head -1 $file.
Ugly, I know. It also opens all kinds of ugly security
holes if $file comes from an untrustworthy source.