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: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |