in reply to add and delete to hash reference

You are treating a HoH as a hash. If you were using strictures (use strict; use warnings;) you would have received the error:

Can't use string ("test") as a HASH ref while "strict refs" in use at +...

Consider:

use strict; use warnings; my $closurehash = {1 => {name => 'fake35'}}; print "create hashref\n"; foreach my $key ( keys(%{$closurehash}) ) { print "$closurehash->{$key}->{'name'}\n"; } print "add to hashref\n"; $closurehash->{ "test" } = "test"; # hash ref foreach my $key ( keys(%{$closurehash}) ) { print "$closurehash->{$key}->{'name'}\n"; } print "delete from hashref\n"; delete $closurehash->{"fake35"}; foreach my $key ( keys(%{$closurehash}) ) { print "$closurehash->{$key}->{'name'}\n"; }

Prints:

create hashref fake35 add to hashref Can't use string ("test") as a HASH ref while "strict refs" in use at +noname1.pl line 14.

whereas:

use strict; use warnings; my $closurehash = {1 => {name => 'fake35'}}; print "create hashref\n"; foreach my $key ( keys(%{$closurehash}) ) { print "$closurehash->{$key}->{'name'}\n"; } print "add to hashref\n"; $closurehash->{2}{ "name" } = "test"; # hash ref foreach my $key ( keys(%{$closurehash}) ) { print "$closurehash->{$key}->{'name'}\n"; } print "delete from hashref\n"; delete $closurehash->{1}; foreach my $key ( keys(%{$closurehash}) ) { print "$closurehash->{$key}->{'name'}\n"; }

prints:

create hashref fake35 add to hashref fake35 test delete from hashref test

which is likely what you were after. Always use strictures!


DWIM is Perl's answer to Gödel