# more Perlish implementation example (update: simplified) package UnorderedPair; use strict; sub new { my $class = shift; my $self = bless {}; @_ and $self -> encode( @_ ); return $self, $class; } sub encode { # x, y, value my $self = shift; my ( $x, $y ) = NDsc( $_[0], $_[1] ); $self -> { $x }{ $y } = $_[2]; } sub decode { # x, y ... return value my $self = shift; my ( $x, $y ) = NDsc( $_[0], $_[1] ); return $self -> { $x }{ $y }; } sub NDsc{ # sort numeric descending return sort { $b <=> $a } @_; } 1;