my @off_pairs = split '=', $input; my %hash; my $lastkey = $off_pairs[0]; foreach ( 1 .. @off_pairs - 2 ) { my @array = split ' ', $off_pairs[ $_ ]; my $newlastkey = pop @array; $hash{ $lastkey } = join ' ', @array; $lastkey = $newlastkey; } $hash{ $lastkey } = $off_pairs[-1];