++ ++ ++ for pushing yourself to try new things! I also really like that you worked to understand the code and make it your own.
A while loop always prints keys in the order they appear in the hash. To get the keys in the right order, you need a slightly different technique: (a) extract the keys (b) sort them (c) use a foreach loop to visit each key (d) for each key query the hash to get the value. The code to print out the hash would look something like this:
# keys %foo: extracts the keys from hash %foo
# and returns them as an array
#
# sort @foo: sorts the elements of array @foo
#
# foreach: loops through the
my @aKeys = sort(keys(%hSequences));
foreach my $k (@aKeys) {
my $v = $hSequences{$k}; #get value
$k =~ s/ / gid=/;
print ">$k\n" . join("\n", sort @$v) . "\n";
}
For more information, see keys and sort.
I'm assuming the number of keys is a lot less than 2G and that you have enough memory to hold the keys and sort them. If not, there are some other things that can be done to sort a super large key list, but see first you can do without getting fancy.
Good luck and great work!
Best, beth |