my %hash = ( 'one' => 1, 'two' => 2, 'three' => 3, 'four' => 4, 'five' => 5); my %dependencies =( 'one' => [], 'two' => [], 'three' => ['four'], 'four' => ['one','two'], 'five' => ['three']); #### sub my_del($){ while (my $key = each (%hash)){ print "KEY = $key\n"; foreach (@{ $dependencies{$key} }){ if( $_ eq $_[0]){ print"Going to call sub for $key\n"; my_del($key); } } print"\n"; } delete $hash{$_[0]}; print "Deleting $_[0]\n"; } my_del('one'); #### KEY = three KEY = five KEY = one KEY = two KEY = four Going to call sub for four Deleting four KEY = three KEY = five KEY = one KEY = two Deleting one #### my %dependencies =( 'one' => [], 'two' => [], 'three' => ['one'], 'four' => ['three','two'], 'five' => ['three']); #### KEY = three Going to call sub for three KEY = five Going to call sub for five KEY = one KEY = two KEY = four Deleting five KEY = three KEY = one KEY = two KEY = four Going to call sub for four Deleting four KEY = three KEY = one KEY = two Deleting three KEY = one KEY = two Deleting one