You can't do that. Like friedo mentioned, you can add more than one item to a hash at a time using hash slices. You can also add more than one item to an array at a time using array slices (which he didn't show). But that's it. You can't add to a hash and to a structure referenced by an element of that hash at the same time.
You say you don't understand why it isn't allowed, so let me explain. Any valid Perl expression (or barewords when using =>) can be used where a hash key is expected. If they allowed fancy expressions like arr1[2], Perl would have to be changed to not allow Perl expressions where hash keys are expected, since it wouldn't know which parsing rules to use. That would disallow $hash{uc{$key}} = $value, for example, and that would be bad.
Not only would Perl incur a great loss of commonly used functionality, the only benefit is a small potential improvement in readability. I personally think it reduces readability because it creates a method for making assignments that doesn't use the assignment operator. You're trying to treat => as an assignment operator, but => can actually be used anywhere , is used. The arrow is pointing in the wrong direction for an assignment operator anyway.
By the way,
$hash_ref->{ key1 => "new value1", key3 => "add value3" }
means
$hash_ref->{join($;, 'key1', "new value1", 'key3', "add value3")}It will give you the warning "Useless use of hash element in void context" unless you assign a value to it, or assign it to a variable.
In reply to Re: Add values to a referenced HoH
by ikegami
in thread Add values to a referenced HoH
by nedals
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |