A statement sequence may contain declarations of lexically-scoped variables, but apart from declaring a variable name, the declaration acts like an ordinary statement, and is elaborated within the sequence of statements as if it were an ordinary statement. That means it actually has both compile-time and run-time effects. [emphases added]

I cannot disagree with Fletch's reply++, but would word my answer slightly differently.

I think the quoted paragraph refers specifically to the distinction between compile-time declaration and run-time assignment for lexical variables. Consider

c:\@Work\Perl\monks>perl -wMstrict -le "func(); ;; my $string = 'hiya'; ;; sub func { print $string; } " Use of uninitialized value in print at -e line 1.
and
c:\@Work\Perl\monks>perl -wMstrict -le "my $string = 'hiya'; ;; func(); ;; sub func { print $string; } " hiya

In the first statement sequence,  $string is declared (and default-initialized to undef) at compile time so  func() can compile correctly under strictures, but the run-time execution order is such that it has no correct assigned value when  func() is invoked at run time.

In the second statement sequence,  $string is both declared (at compile time) and assigned a "correct" value (at run time) before  func() is invoked (at run time), so everybody's happy.


Give a man a fish:  <%-{-{-{-<


In reply to Re: What is an ordinary statement? by AnomalousMonk
in thread What is an ordinary statement? by ntj

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.