Hello List,
I have a data structure like so:
%p_mod = {
'A' => {
'fingers' => {
'4' => 'ABSFMQS',
'5' => 'SMTFQNL',
},
'name' => '8-H34'
},
'C' => {
'fingers' => {
'1' => 'ALEJIEK',
'2' => 'BESLERJ',
},
'name' => '9-J09'
},
'B' => {
'fingers' => {
'3' => 'OLPWJEK',
},
'name' => '6-G79'
}
}
To access the keys to the hash reference under 'fingers' ordered by the
interior number (1 through 5) I have made this construct:
foreach my $mods (reverse sort keys %p_mod) { #first sort to go C,B,A
for my $position ( sort keys %{ $p_mod{$mods}{fingers} }) {
print "$position => $p_mod{$mods}{fingers}{$position}\n";
}
}
The second sort exploits the fact that the numbers will never be greater
than 5 (due to the nature of the data), so a default sort will do the
same thing as a numeric sort. This is good because it is easy and, I've
heard, using default sort is faster than any other way of sorting in
Perl. However, I am curious as to how this would be accomplished the
"proper" way; that is, by numerically sorting the keys of the anonymous
hash referenced by 'finger' (please correct this last statement if it is
incorrect, as it reflects my understanding of the problem as it
currently exists).
So far, I've found that this "works" in the sense that the correct
things are printed out:
foreach my $mods (reverse sort keys %p_mod) { #first sort to get
#order C,B,A
for my $position ( sort {
${ $p_mod{$mods} }{$b}
<=>
${ $p_mod{$mods} }{$a}
}
keys %{ $p_mod{$mods}{fingers} }
) {
print "$position => $p_mod{$mods}{fingers}{$position}\n";
}
}
However, since I of course "use warnings", Perl tells me "Use of
uninitiated value in numeric comparison (<=>) at [relevant line]...".
Specifically, it prints out:
Use of uninitialized value...
Use of uninitialized value...
1 => ALEJIEK
2 => BESLERJ
3 => OLPWJEK
Use of uninitialized value...
Use of uninitialized value...
4 => ABSFMQS
5 => SMTFQNL
I am so close, it's driving me nuts. Please let me know what I am
screwing up here. Also, if this is a totally ridiculous way of doing
things (like, "you're better off with THIS kind of data structure",
etc.), you can tell me that, too. I'm here to learn.
Thanks in Advance,
Hardly
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>