use strict; use warnings; my %hash; assign(\%hash, 'aa', 'bb', 'cc', 'value'); print $hash{aa}{bb}{cc}; sub assign { my $p = shift; my $val = pop; my $last = pop; for (@_) { $p->{$_} = {} if !$p->{$_}; $p = $p->{$_}; } $p->{$last} = $val; }