#!/usr/bin/perl use strict; my $ref1 = [ { key => [ [ "foo" ] ] } ]; my $ref2 = [ [ { key => [ "bar" ] } ] ]; my $ref3 = [ { key => [ [ "baz" ] ] } ]; sub type { my $obj = shift; my $type; START: if (ref($obj) eq "HASH") { $type .= "oH"; $obj = [values(%$obj)]->[0]; goto START; } elsif (ref($obj) eq "ARRAY") { $type .= "oA"; $obj = $obj->[0]; goto START; } $type =~ s/^o//; return $type; } sub compare { my $obj1 = shift; my $obj2 = shift; my $type1 = type($obj1); my $type2 = type($obj2); return $type1 eq $type2 ? 1 : 0; } print type($ref1); # Returns AoHoAoA print compare($ref1, $ref2); # Returns 0 print compare($ref1, $ref3); # Returns 1