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:
- What is the value of '()' and how does this compare to
the "value" of undef?
- 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.
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: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.