Yes, that was it. I'm new to the arrow notation, anonymous subroutines, etc., and I'm afraid I'm still a bit puzzled by this, but adding the second line here in the main body of the script makes things work:
my $pick = genPickerConverted(\%kmer_prob); $pick = $pick -> ();
(Before I had only the first line.) When I talk about my code never entering the return block in the anonymous subroutine, I just mean that I add a pause/block in the debugger I'm using (Komodo) and then step through the code, looking at the contents of the variables as I go. When I'm stepping through within the "genPickerConverted" subroutine, I see all the variables being created as expected, but then when it gets to the anonymous subroutine, it just jumps back to the main body of the script. Then looking in "$pick", it looks empty. However, I guess I should have gotten a clue because in the "type" column, all of my hashes are listed as "HASH", all of my arrays are listed as "ARRAY", and all of my scalars are listed as not having a "type", except for $pick, which has type "CODE", and if I print out pick before the dereference statement with the arrow, I get a memory location, like "CODE(0x7f9af358dcb8)".
So what's going on? Does $pick contain a reference to the anonymous subroutine, and it also remembers what was in my %kmer_prob hash?
Thanks so very much for the help. I really appreciate it, I've learned a lot, and I was truly stuck.
Eric
In reply to Re^12: an algorithm to randomly pick items that are present at different frequencies
by efoss
in thread an algorithm to randomly pick items that are present at different frequencies
by efoss
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |