Hash keys are strings, not full-blown scalars. This is also why you can't have a hash key that is a reference.

You can't alias a string like you can alias a scalar. You could make a magic scalar that modifies a string when the scalar is modified, but that still wouldn't be enough, because then the string would be changed but the wrong bucket of the hash would be used. So changing a key really requires deleteing and then re-inserting. So Perl could create a magic scalar that does all that work but that would be pretty darn wasteful for the 99.9836% of cases when people do not try to modify hash keys via aliasing the return values from %h. So Perl doesn't do that.

(Yes, I read all of the other answers; I like this explanation better.)

- tye        


In reply to Re: Modifying hash keys via aliasing (strings) by tye
in thread Modifying hash keys via aliasing by vsespb

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.