in my endless quest for Evil Things To Do, I was looking for a way to express this:
in a more succint way. the first thing, of course, was to get rid of $ref, and so I wrote:sub deref { my $ref = shift; return $$ref; }
but this is nothing sexy. so I thought, maybe I can get rid of $ref while still retaining the shift:sub deref { ${$_[0]} }
but this doesn't work, and it took me a bit (and the help of B::Deparse) to understand why.sub deref { ${shift} }
${shift} is interpreted by the parser as a way to write $shift, and of course it returns nothing.
so I realized that the Perl parser needs to be hinted to get shift as a keyword, and this can be done in (at least :-) 3 ways:
the last one I find particularly surprising :-)sub deref { ${shift@_} } # too much explicit sub deref { ${+shift} } # supersticious? cfr. Roger sub deref { ${shift;} }
King of Laziness, Wizard of Impatience, Lord of Hubris
In reply to Re: Perl parser tortured (was: Perl Idioms Explained)
by dada
in thread Perl Idioms Explained - my ($foo, $bar) = @{shift(@_)}{qw/ -foo -bar /}
by Roger
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |