sub hpath(\%$) { my ($href, $path) = @_; while ($path =~ /\G(.+?)\.?/gc) { $href = $href->{$1}; } return $href; } my %c = (1 => { 2 => { 3 => 4 }}); print hpath(%c, "1.2.3");