# dereference an array or an hash sub de_ref { return map { ref $_ eq 'ARRAY' ? de_aref( $_ ) : ref $_ eq 'HASH' ? de_aref( de_href($_) ) : $_ } @_; } # dereference an array ref, if any sub de_aref { return map {ref $_ eq 'ARRAY' ? (@{$_}) : ($_)} @_; } # dereference an hash ref, if any sub de_href { return map {ref $_ eq 'HASH' ? (sort values %$_) : ($_) } @_; }