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:
In reply to Multiple Unordered Hash Keys by neosamuri
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |