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

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.