You could try something like this:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper::Simple;
use List::Util qw/shuffle/;
my @nums = (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
my @shuffled_nums = shuffle(@nums);
my %extracted_nums;
for (0 .. 7) {
$extracted_nums{$_} = shift @shuffled_nums;
}
print Dumper(%extracted_nums);
print Dumper(@shuffled_nums);
%extracted_nums will contain the numbers removed from the original list, and
@shuffled_nums will contain those left over.
Is that what you wanted?
Cheers,
Darren