While working on a recent project, I ran across a case where having a hash with multiple unordered keys would have been helpful. By multiple unordered keys I mean:
$hash{'keyA','keyB'} = "Some Value"; print $hash{'keyB', 'keyA'}; # prints "Some Value";
After looking around on CPAN, I could not find a module that allowed this, and ended up writing my own. The code is here:
package Hash::MultiKey::Unordered; use strict; use warnings; sub TIEHASH { my $class = shift; bless {}, $class; } sub FETCH { my $hash = shift; my $key = shift; return $hash->{ _fix($key)}; } sub STORE { my $hash = shift; my $key = shift; my $value = shift; $hash->{_fix($key)} = $value; } sub DELETE { my $hash = shift; my $key = shift; return delete $hash->{_fix($key)}; } sub EXISTS { my $hash = shift; my $key = shift; return exists $hash->{_fix($key)}; } sub FIRSTKEY { my $hash = shift; keys %$hash; return each %$hash; } sub NEXTKEY { my $hash = shift; return each %$hash; } sub SCALAR { my $hash = shift; return scalar %$hash; } sub _fix { my $key = shift; my(@keys) = split /$;/, $key; @keys = sort @keys; $key = join $;, @keys; return $key; } 1;
My questions are:
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Multiple Unordered Hash Keys
by Arunbear (Prior) on Mar 26, 2008 at 23:43 UTC | |
|
Re: Multiple Unordered Hash Keys
by ysth (Canon) on Mar 27, 2008 at 02:55 UTC | |
|
Re: Multiple Unordered Hash Keys
by samtregar (Abbot) on Mar 26, 2008 at 22:19 UTC | |
|
Re: Multiple Unordered Hash Keys
by mr_mischief (Monsignor) on Mar 26, 2008 at 22:20 UTC | |
by neosamuri (Friar) on Mar 26, 2008 at 23:29 UTC | |
by mr_mischief (Monsignor) on Mar 27, 2008 at 07:32 UTC |