NAME
Tie::LLHash.pm - ordered hashes
DESCRIPTION
This 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.
Don't use it if you want to be able to address your hash entries by number, like you can in a real list ($list[5]).
See also Tie::IxHash by Gurusamy Sarathy. It's similar (it does ordered hashes), but it has a different internal data structure and a different flavor of usage. It makes your hash behave more like a list than this does.
SYNOPSIS
use Tie::LLHash;
tie (%hash, "Tie::LLHash"); # A new empty hash
# 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');
$value = $hash{'things'}; # Look up a value
$hash{'here'} = 'NOW'; # Set the value of an EXISTING RECORD!
$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;
###### Iteration techniques
# Here 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;
}
TO DO
It would be nice if you could do:
tie(%hash, 'Tie::LLHash', key1=>6, key2=>9, ...);
Probably wouldn't be all that hard either.
I could speed up the keys() routine in a scalar context if I kept
track of how many entries were in the hash.
I may also want to add a method for... um, I forgot.
AUTHOR
Ken Williams <ken@forum.swarthmore.edu>
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.