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
andc:\@Work\Perl\monks>perl -wMstrict -le "func(); ;; my $string = 'hiya'; ;; sub func { print $string; } " Use of uninitialized value in print at -e line 1.
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
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |