in reply to Perl Idioms Explained - my ($foo, $bar) = @{shift(@_)}{qw/ -foo -bar /}
interestingly enough, I used something (partly, at least) similar in a recent post of mine.
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;} }
cheers,
Aldo
Aldo
King of Laziness, Wizard of Impatience, Lord of Hubris
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Re: Perl parser tortured (was: Perl Idioms Explained)
by TimToady (Parson) on Mar 02, 2004 at 21:41 UTC | |
by demerphq (Chancellor) on Mar 04, 2004 at 10:55 UTC |
In Section
Meditations