#!/usr/bin/perl # randline - tchrist@perl.com use strict; my @addr = (0); my $i = 0; my $file = shift; my $temp = 0; if (!$file) { $temp = 1; $file = "/tmp/randline.$$"; system "cat > $file"; die "bad cat" if $?; } unless ($file and -f $file and -T $file) { die "usage: $0 file\n"; } open(F, "< $file\0") || die "can't open $file: $!"; unlink $file if $temp; while () { push @addr, tell F; } pop @addr; srand(time() ^ ($$ + ($$ << 15))); my $lineno = int (rand @addr); my $lineaddr = $addr[$lineno]; seek (F, $lineaddr, 0) || die "can't seek to $lineaddr in $file: $!"; $lineno++; print scalar ;