my ($lidno, $perbin, %lists) = (10, 10); my %availableNumbers = map { $_ => $_ } 1..$lidno*$perbin; #### for my $lid (1..$lidno) { my %deck = %availableNumbers; $lists{$lidno} = [ map { delete %deck{ (keys %deck)[rand( keys %deck)]} } 1..$perbin ]; }