If you just want the keys sorted alphabetically, use
But you may run into situations where you really do want to preserve insertion order, and it's not just a matter of sorting alphabetically.for my $k (sort keys %GRAMMAR) {
If you want to preserve insertion order and still use a hash, take a look at Tie::IxHash. Or, if you're not wedded to a hash, you could always use an array, and push array refs onto your list of grammars:
And then when iterating:push @GRAMMAR, [ $1, $2 ];
BTW, when you do a regex match w/ capturing parens, you really should check whether the regex successfully matches:for my $rec (@GRAMMAR) { print $rec->[0], "\n"; }
That way, if the regex fails--ie. the line you're looking at doesn't match that regex--you'll just skip that line. You don't want to use $1 and $2 if the match was unsuccessful, because there's no telling what they could contain. :)next unless /([A-Z]) -> (.*)/; $GRAMMAR{$1} = $2;
In reply to Re: problem with hash keys
by btrott
in thread problem with hash keys
by june_bo
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |