Traverse( \%hashofsomethings, sub { warn "example $_[0]"; }); sub Traverse { my $node = shift; my $code = shift; local $_; if (ref( $node ) eq 'HASH' ) { Traverse( $_ ) for values %$node; } elsif(ref($node) eq 'ARRAY') { Traverse( $_ ) for @$node; } else{ $code ->( $node ); } }