### "Dying and Swearing" explained

by BooK (Curate)
 on Jun 01, 2001 at 17:09 UTC ( #84911=note: print w/ replies, xml ) Need Help??

in reply to Dying and Swearing

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.

Comment on "Dying and Swearing" explained

Create A New User
Node Status?
node history
Node Type: note [id://84911]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (12)
As of 2015-08-28 15:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?