![]() |
![]()
| ![]() |
![]()
NAMETie::LLHash - Ordered hashes DESCRIPTIONThis class implements an ordered hash-like object. It's a cross between a Perl hash and a linked list. Use it whenever you want the speed and structure of a Perl hash, but the orderedness of a list. See also Tie::IxHash by Gurusamy Sarathy. It's similar (it also does tied ordered hashes), but it has a different internal data structure and a different flavor of usage. Tie::IxHash stores its data internally as both a hash and an array in parallel. "Tie::LLHash" stores its data as a bidirectional linked list, making both inserts and deletes very fast. Tie::IxHash therefore makes your hash behave more like a list than "Tie::LLHash" does. This module keeps more of the hash flavor. SYNOPSISuse Tie::LLHash; # A new empty ordered hash: tie (%hash, "Tie::LLHash"); # A new ordered hash with stuff in it: tie (%hash2, "Tie::LLHash", key1=>$val1, key2=>$val2); # Allow easy insertions at the end of the hash: tie (%hash2, "Tie::LLHash", {lazy=>1}, key1=>$val1, key2=>$val2); # Add some entries: (tied %hash)->first('the' => 'hash'); (tied %hash)->insert('here' => 'now', 'the'); (tied %hash)->first('All' => 'the'); (tied %hash)->insert('are' => 'right', 'the'); (tied %hash)->insert('things' => 'in', 'All'); (tied %hash)->last('by' => 'gum'); $value = $hash{'things'}; # Look up a value $hash{'here'} = 'NOW'; # Set the value of an existing record # or insert as last node in lazy mode $key = (tied %hash)->key_before('in'); # Returns the previous key $key = (tied %hash)->key_after('in'); # Returns the next key # Luxury routines: $key = (tied %hash)->current_key; $val = (tied %hash)->current_value; (tied %hash)->next; (tied %hash)->prev; (tied %hash)->reset; # If lazy mode is set, new keys will be added at the end. $hash{newkey} = 'newval'; $hash{newkey2} = 'newval2'; METHODS
ITERATION TECHNIQUESHere is a smattering of ways you can iterate over the hash. I include it here simply because iteration is probably important to people who need ordered data. while (($key, $val) = each %hash) { print ("$key: $val\n"); } foreach $key (keys %hash) { print ("$key: $hash{$key}\n"); } my $obj = tied %hash; # For the following examples $key = $obj->reset; while (exists $hash{$key}) { print ("$key: $hash{$key}\n"); $key = $obj->next; } $obj->reset; while (exists $hash{$obj->current_key}) { $key = $obj->current_key; print ("$key: $hash{$key}\n"); $obj->next; } WARNINGS
TODO
SEE ALSO
COPYRIGHT AND LICENSEKen Williams <kenahoo@gmail.com> Copyright (c) 1998 Swarthmore College. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
|