sub walk { my ( $ref ) = @_; return "$ref" if blessed $ref; given ( ref $ref ) { when ( '' ) { return $ref; } when ( 'ARRAY' ) { return map { walk($_) } @$ref; } when ( 'HASH' ) { return map { $_ => walk($ref->{$_}) } keys %$ref; } default { carp "I'm confused by $ref" } } }