$hash{'keyA','keyB'} = "Some Value"; print $hash{'keyB', 'keyA'}; # prints "Some Value"; #### 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;