in reply to Re (tilly) 3: What is HASH(0x17653d4) for?
in thread What is HASH(0x17653d4) for?

Once the reference is assigned a location, it never moves. The data behind it may get moved, but the reference you see doesn't.

As far as I know, no part of the definition of Perl as a language, enforces this promise. The reference, as it stands, is a somewhat opaque abstraction (ie, you cannot craft or alter a reference, just its stringification).

While it is true that currently references (well, actually objects) do not move once assigned (and this makes a lot of sense), a future implementation might very well shift objects in memory.

This might be useful as part of an improved malloc(), that could interact with the rest of the perl internals to shift objects in memory, defragmenting the space. While this does not exist today (in Perl), I've seen systems that use a scheme like this.

My recomendation would be to stay away from this kind of scheme. Using a reference as a uniquifying key for an object might work, but this kind of scheme, as pointed out by the previous monks, is too fragile.

Regards.

  • Comment on Re: Re (tilly) 3: What is HASH(0x17653d4) for?