use List::Util qw[ reduce ]; my $line = 'a1:a2:a3=key'; my $href = reduce{ my $r={}; $r->{$b}=$a; $r } reverse split /:|=/, $line; print Dumper $href; $VAR1 = { 'a1' => { 'a2' => { 'a3' => 'key' } } };