Perl Golf, I find, exposes me to some of the most unusual things in Perl as one tries to find a way to save a single character. Sometimes you discover a dozen different ways that don't work, a few that sort-of work, and one that really works, but sometimes for reasons unknown. In a recent effort, I found something a little surprising in the way that Perl processes an array definition which was causing some alignment problems within my program, and it made me think about something I hadn't thought about before.

What is the difference between "undef" and "nothing" in the context of an array definition?

Here is an array that has two elements, the first entry disappearing because it is an empty array:
my @array = ( (), 1, 2 );
Here is an array that has three elements, the first entry staying because it is a value of 'undef':
my @array = ( undef, 1, 2 );
Here is an array that has two elements, the first entry disappearing because it references "nothing":
my @array = ( (1,2,3)[3], 1, 2 );
The way map operates, collapsing out 'undef' values, and the way a regular array treats data, is slightly different and may be cause for confusion.

So, here's two simple questions for reflection:
  1. What is the value of '()' and how does this compare to the "value" of undef?
  2. What is the shortest way to insert an undef value into an array as a place holder? (Think: Perl Golf)
This kind of reminds me of the subtle difference between the deprecated "defined %hash" versus "scalar keys %hash" that was discussed recently.

In reply to Collapsing Arrays with Empty Values by tadman

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.