in reply to Using a hash for an ordered set can make sense

I'd like to address the assertion that for forward iterating you need one hash and for reverse iteration, you need another. This seems to me like you would have a hash of hashes, built as such:
my %datastructure = ( forward_iteration => { }, reverse_iteration => { }, );
This seems wasteful to me. Instead, why not have something like
my %datastructure = { elem1 => { forward => 1, reverse => 2, }, elem2 => { forward => 2, reverse => 1, }, };
This way, if you want to change your code to add a new ordering mechanism (which happens more often that I'd like), you just add another value to each element's hashref of orderings. And, building the ordered-hash is more obvious, because you're doing something like
$datastructures{$elem} = { forward => forward_val($elem), reverse => reverse_val($elem), other_way => other_way_val($elem), }
Just a thought. :-)

------
We are the carpenters and bricklayers of the Information Age.

Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.