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

As I already said in chatter, the semicolon in Perl is a statement separator not a statement terminator (unlike in C). So the semicolon is not a part of the statement.

        - tye (but my friends call me "Tye")
  • Comment on (tye)Re3: Extract potentially quoted words

Replies are listed 'Best First'.
Re: (tye)Re3: Extract potentially quoted words
by merlyn (Sage) on Jun 07, 2001 at 03:02 UTC
    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

      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")
      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.

      Noone said the semicolon is the *only* statement separator.