#!/usr/bin/perl -w use strict; use Data::Dumper; # a core utility use List::Util qw(shuffle); # a core utility my @data; while () { next if /^\s*$/; #skip blank lines my ($important) = (split(' ',$_))[0]; push @data, $important; } print Dumper \@data; #debug - just to verify the split() # so @data is about 100,000 entries # this is a big array, but not that big # the use of splice() works, but is relatively inefficient # perhaps just use List::Util shuffle to randomize the # indicies? # This will create a list with 100,000 values # but it will do it efficiently. # Within the parameters of what you have said, # 1/4 million array/list elements will work ok, even on # my wimpy Win XP32 bit machine foreach my $index (shuffle (0..@data-1)) { print "$index $data[$index]\n"; } =prints VAR1 = [ 'FRZPY5Q02F00L9.ICM_AWP_Bv6.AWP_0001_2007_08_23', 'FRZPY5Q02F00U8.ICM_AWP_Bv6.AWP_0001_2007_08_23', 'FRZPY5Q02F01NC.ICM_AWP_Bv6.AWP_0001_2007_08_23', 'FRZPY5Q02F023C.ICM_AWP_Bv6.AWP_0001_2007_08_23' ]; 3 FRZPY5Q02F023C.ICM_AWP_Bv6.AWP_0001_2007_08_23 2 FRZPY5Q02F01NC.ICM_AWP_Bv6.AWP_0001_2007_08_23 1 FRZPY5Q02F00U8.ICM_AWP_Bv6.AWP_0001_2007_08_23 0 FRZPY5Q02F00L9.ICM_AWP_Bv6.AWP_0001_2007_08_23 =cut __DATA__ FRZPY5Q02F00L9.ICM_AWP_Bv6.AWP_0001_2007_08_23 ACTGCCAACGCGCAGAACCTTACCAGGTCCTGACTTCCTGACTATGGTTATTAGAAATAA TTTCCTTCAGTTCGGCTGGGTCAGTGACAGGTGATGCATGGCCGTC FRZPY5Q02F00U8.ICM_AWP_Bv6.AWP_0001_2007_08_23 ACTGCCTAACCGATGAACCTTACCTACACTTGACATGCAGAGAACTTTCCAGAGATGGAT TGGTGCCTTCGGGAACTCTGACACAGGTGATGCATCGCCGTC FRZPY5Q02F01NC.ICM_AWP_Bv6.AWP_0001_2007_08_23 ACTGCCTACGCGAAGAACCTTACCTACACTTGACATACAGAGAACTTACCAGAGATGGTT TGGTGCCTTCGGGAACTCTGATACAGGTGATGCATGGCTGTC FRZPY5Q02F023C.ICM_AWP_Bv6.AWP_0001_2007_08_23 ACTGCCAACGCGCAGAACCTTACCAACCCTTGACATCCAGAGAATTTTCTAGAGATAGAT TTGTGCCTTCGGGAACTCTGTGACAGGTGATGCATGGCTGTC