Perl: the Markov chain saw PerlMonks

### Dying and Swearing

by Abigail (Deacon)
 on Jun 01, 2001 at 10:47 UTC Need Help??

```eval {die [[qq [Just another Perl Hacker]]]};; print
\${\${\${@}}[\$#{@{\${@}}}]}[\$#{\${@{\${@}}}[\$#{@{\${@}}}]}]

-- Abigail

Replies are listed 'Best First'.
"Dying and Swearing" explained
by BooK (Curate) on Jun 01, 2001 at 17:09 UTC

Very good one! This is what I call unreadable...

You are using a propriety of die() I didn't know of...

die() can also be called with a reference argument. If this happens to be trapped within an eval(), \$@ contains the reference.

So after the eval() died \$@ contains a reference to an array holding only one element, which is a reference to an array containing the string "Just another Perl hacker". But what does the print() actually print?

Let's cut the all thing in several bits: first you must know that \$#{@{\${@}}} equals 0. Here is why: when you see \$#a, this is the value of the last array index (one less than the size of the array) of the array @a. @{\${@}} is an array dereference. Since \$@ is an array holding only one value, the result is 0.

We now have to understand \${\${\${@}}[0]}[\$#{\${@{\${@}}}[0]}]... We recognize the underlined part as an index value. Let's calculate it.

• \${\${@}}[0] is the first element of the array reference by \$@ (which is another reference to the array holding the string we want to print).
• In \$#{\${@{\${@}}}[0]} the underlined part is an array (dereferenced from \$@). The \$#<array> notation will give us the value of the last index of the array, which is 0.

With \${\${\${@}}[0]}[0], we are almost there. The underlined part is an array dereference, from which we want the first element.

This element is "Just another Perl hacker". QED.

Create A New User
Node Status?
node history
Node Type: obfuscated [id://84863]
Approved by root
help
Chatterbox?
 [Corion]: Hmmm - I thought we'd made the textarea CSS-sized to 100% a long time ago?! [Corion]: ... nope, it isn't [LanX]: heh ... 11.78 popes per square mile ...never thought I might find miles handy [ambrus]: TCLion: it's to make people write non-short writeups in an external editor and save it to a local file. otherwise people will complain that they had a very insightful extended reply but their browser died just when they were almost ready posting it. [ww]: ++ambrus "their browser died just when...."

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (16)
As of 2017-03-23 18:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
Should Pluto Get Its Planethood Back?

Results (292 votes). Check out past polls.