in reply to (tye)Re3: Extract potentially quoted words
in thread Extract potentially quoted words

If it was only a statement separator, then either this should be legal:
$a = 3 # no semi needed here if ($a == 5) { print "b" }
Or this should be illegal:
if ($a == 5) { print "b" } if ($b == 2) { print "c" }
Because if we need it as a separator, how come we don't need it consistently for those?

No, the current syntax mimics C syntax, where an expression is not a statement, but an expression followed by a semicolon is indeed a statement. Too bad that the terminology has gotten muddled somewhere, but Perl acts according to this definition regardless of how the manpages read.

-- Randal L. Schwartz, Perl hacker

Replies are listed 'Best First'.
(tye)Re4: Extract potentially quoted words
by tye (Sage) on Jun 07, 2001 at 03:13 UTC

    Fine, I ammend my statement from:

    Although in Perl, most statements can also be used as expressions, there are a few exceptions.
    to
    Although in Perl, most statements can also be used as expressions (so long as you drop the final ";", if there happens to be one there), there are a few exceptions.
    so you can be happy with your definition of the word "statement". I'll leave the original wording in place for historical reasons (and because it is easier to understand, for most people).

    There are too many cases where the semicolon is optional in Perl so I don't consider the semicolon as being part of the statement. You give a good example of why the semicolon isn't strictly just a statement separator either. But whether the semicolon is required has more to do with things outside the statement than the statement itself, so I find it hard to consider it as an integral part of the statement. I still think of it as being used to separate statements, it just isn't always required to separate statements. I find both points of view equally valid.

    What a silly argument. q-:

            - tye (but my friends call me "Tye")
Re: Re: (tye)Re3: Extract potentially quoted words
by dws (Chancellor) on Jun 07, 2001 at 03:51 UTC
    I'll pick one nit with merlyn's example:
    $a = 3 # no semi needed here if ($a == 5) { print "b" }
    The problem is that both   $a = 3 and   $a = 3 if ($a == 5) are legal statements in the Perl grammar. Who is to say that the author didn't mean:   $a = 3 if ($a == 5); { print "b" } This is one of the perils with error recovery in compilers, and a particular problem with Perl.

Re: Re: (tye)Re3: Extract potentially quoted words
by Anonymous Monk on Jun 07, 2001 at 13:50 UTC
    Noone said the semicolon is the *only* statement separator.