my %mapping = ( ARRAY => '@', HASH => '%', SCALAR => '$',
GLOB => '*', REF => '$', CODE => '&' );
return eval $mapping{$type}.'{$_[0]}';
####
return @{$_[0]} if $type eq "ARRAY";
return %{$_[0]} if $type eq "HASH";
return ${$_[0]} if $type eq "SCALAR";
return *{$_[0]} if $type eq "GLOB";
return ${$_[0]} if $type eq "REF";
return &{$_[0]} if $type eq "CODE";
####
my( $ref )= @_;
$ref= $$ref while UNIVERSAL::isa($ref,"REF");
return @$ref if UNIVERSAL::isa($ref,"ARRAY");
return %$ref if UNIVERSAL::isa($ref,"HASH");
return $$ref if UNIVERSAL::isa($ref,"SCALAR");
return &$ref() if UNIVERSAL::isa($ref,"CODE");
return $$ref,@$ref,%$ref if UNIVERSAL::isa($ref,"GLOB");