sub put { die "Usage: put \\hash, key1, ..., keyn, value\n" unless @_ >= 3; my $hash = shift; die "Not a HASH reference\n" unless ref($hash) eq "HASH"; my $value = pop; my $key = pop; while (@_) { my $key = shift; if (!exists($hash->{$key})) { $hash = $hash->{$key} = { }; next; } elsif (ref($hash->{$key}) eq "HASH") { $hash = $hash->{$key}; next; } else { die "Not a HASH reference\n"; } } $hash->{$key} = $value; }