Thank you very much Schlomi - I stand corrected!

Frank, another way of putting what Schlomi has illustrated is that:

%{$self->{'DATA'}} = ( foo => 'bar' );

means "change the contents of the hash which $self->{'DATA'} refers to",
while

$self->{'DATA'} = { foo => 'bar' };

means "change $self->{'DATA'} to refer to a different hash"

Andrew




On Sun, Apr 12, 2015 at 9:05 AM, Shlomi Fish <shlo...@shlomifish.org> wrote:

> Hi Andrew,
>
> On Sun, 12 Apr 2015 07:25:55 +0100
> Andrew Solomon <and...@geekuni.com> wrote:
>
> > Hi Frank
> >
> > I found the first one rather obscure, but they are equivalent.
>
> No - they are not exactly the same. See below:
>
> > To prove
> > this, Data::Dumper is my friend:
> >
> > #!/usr/bin/perl
> >
> > use strict;
> > use warnings;
> > use Data::Dumper;
> >
> > {
> >   my $self;
> >
> >   print "selfish self \n";
> >   %{$self->{'DATA'}} = ( foo => 'bar' );
> >   print Dumper $self;
> > }
> >
> > {
> >   my $self;
> >
> >   print "selfless self \n";
> >   $self->{'DATA'} = { foo => 'bar' };
> >   print Dumper $self;
> > }
> >
>
> However, with this program:
>
> < CODE >
> #!/usr/bin/perl
>
> use strict;
> use warnings;
> use Data::Dumper;
>
> {
>     my $self;
>
>     $self->{'DATA'} = { one => 'two', };
>     my $slot = $self->{'DATA'};
>
>     print "selfish self \n";
>     %{$self->{'DATA'}} = ( foo => 'bar' );
>     print Dumper $slot;
> }
>
> {
>     my $self;
>
>     $self->{'DATA'} = { one => 'two', };
>     my $slot = $self->{'DATA'};
>
>     print "selfless self \n";
>     $self->{'DATA'} = { foo => 'bar' };
>     print Dumper $slot;
> }
>
> < / CODE >
>
> I am getting this output:
>
> < SHELL >
>
> shlomif@telaviv1:~$ perl Test-hash-clear.pl
> selfish self
> $VAR1 = {
>           'foo' => 'bar'
>         };
> selfless self
> $VAR1 = {
>           'one' => 'two'
>         };
> shlomif@telaviv1:~$
>
> < / SHELL >
>
> So as can be seen, they are not exactly equivalent.
>
> Regards,
>
>         Shlomi Fish
>
> --
> -----------------------------------------------------------------
> Shlomi Fish       http://www.shlomifish.org/
> Escape from GNU Autohell -
> http://www.shlomifish.org/open-source/anti/autohell/
>
> <rindolf>  If you repeat a scene 50k times, then the movie will have less
> entropy and will compress better. ( irc://irc.freenode.org/#perlcafe )
>
> Please reply to list if it's a mailing list post - http://shlom.in/reply .
>



-- 
Andrew Solomon

Mentor@Geekuni http://geekuni.com/
http://www.linkedin.com/in/asolomon

Reply via email to