use Data::Dump::Streamer qw(reftype regex); my $type=reftype($obj); if ($type eq 'SCALAR' and my $re=regex($obj)) { # Its a regex, $re contains the unquoted pattern } elsif ($type eq 'REF' or $type eq 'SCALAR' or $type eq 'GLOB') { # its something that can be derefed by $$obj } elsif ( $type eq 'HASH' ) # its a hash } elsif ( $type eq 'ARRAY' ) # its an array } elsif ( $type eq 'CODE' ) # its code ref } elsif ( $type eq 'FORMAT' ) # its a format ref } elsif ( $type) { warn "Unhandled type: '$type'\n"; } else { # its not a reference at all }