#! perl -sw use strict; $| = 1; sub shuffle { my $ref = @_ == 1 ? $_[ 0 ] : \@_; my $n = @$ref; for( 0 .. $#$ref ) { my $p = $_ + rand( $n-- ); my $t = $ref->[ $p ]; $ref->[ $p ] = $ref->[ $_ ]; $ref->[ $_ ] = $t; } return unless defined wantarray; return wantarray ? @{ $ref } : $ref; } warn 'Start : '.localtime() .$/; my @data = <>; warn 'Read : '.localtime() .$/; shuffle \@data; warn 'Shuffled: '.localtime().$/; print for @data; warn 'Written : '.localtime().$/; __END__ P:\test>shuffleFile.pl data\1millionlines.dat >nul Start : Fri Apr 15 19:41:44 2005 Read : Fri Apr 15 19:41:53 2005 Shuffled: Fri Apr 15 19:41:55 2005 Written : Fri Apr 15 19:41:57 2005