The keys
and each
functions give you the hash elements in a strange order, and you want them in the order in which you inserted them.
use Tie::IxHash; tie %HASH, "Tie::IxHash"; # manipulate %HASH @keys = keys %HASH; # @keys is in insertion order
Tie::IxHash makes keys
, each
, and values
return the hash elements in the order they were added. This often removes the need to preprocess the hash keys with a complex sort
comparison or maintain a distinct array containing the keys in the order they were inserted into the hash.
Tie::IxHash also provides an object-oriented interface to splice
, push
, pop
, shift
, unshift
, keys
, values
, and delete
, among others.
Here's an example, showing both keys
and each
:
# initialize use Tie::IxHash; tie %food_color, "Tie::IxHash"; $food_color{Banana} = "Yellow"; $food_color{Apple} = "Green"; $food_color{Lemon} = "Yellow"; print "In insertion order, the foods are:\n"; foreach $food (keys %food_color) { print " $food\n"; } print "Still in insertion order, the foods' colors are:\n"; while (( $food, $color ) = each %food_color ) { print "$food is colored $color.\n"; }
In insertion order, the foods are:
Banana
Apple
Lemon
Still in insertion order, the foods' colors are:
Banana is colored Yellow.
Apple is colored Green.
Lemon is colored Yellow.
The documentation for the CPAN module Tie::IxHash; Recipe 13.15
Copyright © 2001 O'Reilly & Associates. All rights reserved.