|
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. SYNOPSIS use 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.
|