scalar() may not be unique, and may change over the lifetime of the object. For instance, in this case, I've got the scalar conversion overloaded to return the class name and some basic info on the state of the class. Useful for debugging and error returns. However it is quite easy to set up two different objects so that they appear the same. Also, calling one of a few different methods will change what would be returned. (Which leads to a self-referential loop: To get the scalar value, you have to know the scalar value...)

refaddr() by contrast is stable: The object will always be in a particular location, until it is no longer that object. And no two objects may have the same location at the same time. So it is much safer to use. I don't actually care what the key is, as long as it is unique and stable, and refaddr provides that.

As for complex... Past the inside-out object, it's just an array of arrays, and the second level array is just to keep things associated. I actually looked at setting up two different arrays, but this is much simpler to keep track of.


In reply to Re^3: Calling a subroutine via multiple dereferences. by DStaal
in thread Calling a subroutine via multiple dereferences. by Anonymous Monk

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.