[Pdx-pm] defined $var->{key} changes $var in to a hashref?

Michael G Schwern schwern at pobox.com
Mon Feb 22 16:21:15 PST 2010


benh wrote:
> ok I guess I should rephrase, I understand ~why~ it's doing this
> ($var->{} builds out the hash, not defined), but it's not quite what
> my ~expectation~ was. What I was thinking was going to happen was more
> along the lines of:
> 
> grep{$x = $_; $x->{key}} $var
> 
> so that $var was not touched... though I can't think of a good way for
> defined to effectively clone in place as the transformation would have
> already happened as far as defined was concerned.

Welcome to the Wonderful World of Autovivification.  Generally considered to 
be a bug, or an overzealous feature, in cases where it vivifies just to check 
if something exists.  Unfortunately, it was ill defined and is considered too 
ingrained into Perl to change.

autovivification.pm can control this behavior lexically.  perl5i comes with 
"no autovivification" built in.


-- 
54. "Napalm sticks to kids" is *not* a motivational phrase.
     -- The 213 Things Skippy Is No Longer Allowed To Do In The U.S. Army
            http://skippyslist.com/list/


More information about the Pdx-pm-list mailing list