in reply to Re^2: Perl Syntax
in thread Perl Syntax

Uggh ... that is one bad code smell ... basically in that context you're getting the memory address of the reference value and using it as the key for the hash.


Replies are listed 'Best First'.
Re^4: Perl Syntax
by davido (Cardinal) on Oct 30, 2013 at 21:45 UTC

    Some call it code smell, others call it the basis for managing inside-out objects.

    Update: Example from Class::Std:

    sub import { my $caller = caller; no strict 'refs'; *{ $caller . '::ident' } = \&Scalar::Util::refaddr;


      Not an especially useful technique for managing inside-out objects. (Not without some care anyway.) Reference addresses can be recycled.

      use strict; use warnings; use Scalar::Util 'refaddr'; use Data::Dumper; for my $i (0..2) { my $hash = [$i]; printf "The hash has refaddr %08X, and contents are...\n", refaddr +($hash); print Data::Dumper->Dump([$hash], ['$hash']); }

      With carefully written CLONE and DESTROY methods, using the refaddr as a hash key can be made to work, but something like Hash::FieldHash saves a lot of work.

      use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name