open my $fh, '<', $file or die "$file : $!"; my $p = int( 1 + rand -s $fh ); seek $fh, $p - $GLEN, 0; chomp( my $pick = <$fh> ); chomp( $pick = <$fh> ) while tell( $fh ) < $p; #### #! perl -slw use strict; our $GLEN ||= 10; our $TRIES ||= 1000; sub randLine { open my $fh, '<', $_[ 0 ] or die "$_[ 0 ] : $!"; my $p = int( 1 + rand -s $fh ); seek $fh, $p - $GLEN, 0; chomp( my $pick = <$fh> ); chomp( $pick = <$fh> ) while tell( $fh ) < $p; return $pick; } my %stats; for ( 1 .. $TRIES ) { $stats{ randLine( $ARGV[ 0 ] ) }++ ; } print "$_ : $stats{ $_ }" for sort keys %stats; #### P:\test>414916 -GLEN=10 -TRIES=100000 junk line 1 : 9964 line 10 : 11168 line 2 : 9862 line 3 : 9999 line 4 : 9889 line 5 : 9853 line 6 : 9749 line 7 : 9963 line 8 : 9751 line 9 : 9802 P:\test>414916 -GLEN=100 -TRIES=100000 junk line 1 : 9910 line 10 : 11195 line 2 : 9826 line 3 : 9830 line 4 : 9851 line 5 : 9772 line 6 : 9965 line 7 : 9854 line 8 : 9991 line 9 : 9806 #### P:\test>414916 -GLEN=7 -TRIES=100000 junk ine 1 : 1239 ine 10 : 1199 ine 2 : 1273 ine 3 : 1265 ine 4 : 1233 ine 5 : 1223 ine 6 : 1166 ine 7 : 1245 ine 8 : 1268 ine 9 : 1251 line 1 : 8594 line 10 : 8575 line 2 : 8630 line 3 : 8647 line 4 : 8534 line 5 : 8666 line 6 : 8768 line 7 : 8714 line 8 : 8581 line 9 : 8683 ne 10 : 1246