#!/usr/bin/perl -w use strict; use Data::Dumper; sub derefHashTree { my( $hv, @keys )= @_; my $ref= \$hv; for my $key ( @keys ) { $ref= \$$ref->{$key}; } return $ref; } my %hash1; $hash1{key1}{key2}{key3}{A} = "hello"; $hash1{key1}{key2}{key3}{B} = "bye"; my $new_hash = \%hash1; my @keys= qw( key1 key2 key3 A); #foreach( keys %{ derefHashTree($new_hash,@keys) } ) { # print "$_\n"; #} my $new_ref = derefHashTree($new_hash,@keys); delete $new_ref; print Dumper(\%hash1);