in reply to Filling hashes

You haven't defined $ligand anywhere (if you had warnings and strict turned on, perl would've complained about that), yet you use it as the hash key. I'm not sure how your hash ends up with more than a single pair in it!

I would rewrite the meat of your code as follows:

# @key_set and @val_set are my names for @A1 and @A2 # there is no need to shuffle them! my %pairs; my $size = 100; # from the user until (keys(%pairs) == $size) { my $key = $key_set[rand @key_set]; my $val = $val_set[rand @val_set]; $pairs{"$key-$val"} = 1; # or even just: # $pairs{$key_set[rand @key_set] . "-" . $val_set[rand @val_set]} = +1; } for (keys %pairs) { print "$_\n"; }
This seems to fulfill your goal.

Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart