# 20 random integers, 0-99 my @orig_list = map { int rand 100 } 0 .. 20; my @selected = (); # items selected my $desired = 10; # how many items to select my %found = (); # indexes already used while ( scalar @selected < $desired ) { my $index; $index = int rand @orig_list until ! $found{$index}++; push @selected, $orig_list[$index]; }