my $var = 42 if 0;

used to be the idiom for achieving a state variable, that is, one that lived on from one invocation of a subroutine or block to another. it usually leads to more trouble than benefit, and anyway, since 5.10 there is the state keyword.

A simple way to achieve the result you want is to reverse the order of alternatives for @headerElements. Instead of handling the exception of $headerStr not having a value, why not assign @headerElements a deafult value, and then possibly override that with values derived from $headerStr?

my @headerElements = ( 'value 1', 'value 2', 'value 3' ); @headerElements = split /\s+/, $headerStr if $headerStr;

Another way is to preserve the order you had, but use a ternary operator ... an inline if-block:

my @headerElements = ( $headerStr ? split /\s+/, $headerStr : ( 'value 1', 'value 2', 'value 3' ) );

You could also do it using a logical-or test operator to detect whether the result of the split is a true or false value. This could result in complications if the left value is valid but logically false, for example, a zero or an empty string. But in this case it seems safe enough. Note that you have to parenthesize the arguments to split(), to specify the end of the arg list.

my @headerElements = split( /\s+/, $headerStr ) || ( 'value 1', 'value + 2', 'value 3' );

As Occam said: Entia non sunt multiplicanda praeter necessitatem.


In reply to Re: scope of an autovivified variable? by TomDLux
in thread scope of an autovivified variable? by rmcgowan

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.