my @data = ( qq{key1~key2~key3\nvalue for key1, key2, key3}, qq{key4~key5~key6\nValue for key4, key5, key6}, qq{key7~key8~key9\nValue for key7, key8, key9} ); my %hash; foreach my $d (@data) { my ($key_str, $val_str) = split("\n", $d); my @keys = split("~", $key_str); @hash{@keys} = ($val_str) x scalar(@keys); }