sub process {
my $node = shift;
if (my $reftype = ref($node)) {
return process_array($node) if $reftype eq 'ARRAY';
return process_hash($node) if $reftype eq 'HASH';
die "invalid node type: $reftype";
} else {
return process_scalar($node);
}
}
process({ 'a' => '1', 'b' => [ '2' ], 'c' => { 'd' => '3' } });
####
package Local::MyComp::Map;
sub new { ... }
sub get { ... }
sub set { ... }
sub keys { ... }
etc. etc.
####
if (my $reftype = ref($node)) {
if (blessed($node) && $node->isa(Local::MyComp::Map) {
process_map($node);
}
...