in reply to hangman game

Seems a semicolon is missing at:  print join( "\n", @hangman[0..$wrong-1] )

Replies are listed 'Best First'.
Re^2: hangman game
by toolic (Bishop) on May 18, 2015 at 14:51 UTC
    It is optional (but recommended). From Simple Statements:
    Every simple statement must be terminated with a semicolon, unless it is the final statement in a block, in which case the semicolon is optional. But put the semicolon in anyway if the block takes up more than one line, because you may eventually add another line.
      I sit corrected. I'm relatively new to Perl myself, but like to keep from using some of the shortcuts for readability. Most of my previous experience is with C, C++, COBOL, and a few others...
      I'm trying to remember the other language where the final semicolon is wrong. Drove me nuts. (Or was this a really old version of Perl? I can't remember.)

      Reminds me of the Comma Operator, which in hindsight seems like a mistake. I've never understood why it's needed, when a semicolon will do. Perhaps someone can point up an example where it's helpful?

      -QM
      --
      Quantum Mechanics: The dreams stuff is made of

        Hello QM,

        I assume you’re referring to the comma operator in scalar context, which “evaluates its left argument, throws that value away, then evaluates its right argument and returns that value.” (perlop#Comma-Operator).

        A quick Google search found this 2010 discussion: http://stackoverflow.com/questions/2200759/when-is-perls-scalar-comma-operator-useful, in which Jonathan Feinberg suggests that the scalar context comma operator is provided for two reasons:

        1. As a hangover from C, because Perl was originally derived from C.
        2. Because it’s useful in cases where you want to execute two or more statements in a syntactic context that allows only a single statement.

        Here’s a contrived example:

        19:49 >perl -wE "for (my ($i, $j) = (1, 5); $i <= 5; ++$i, --$j) { say + abs($i - $j); }" 4 2 0 2 4 19:49 >

        Of course, it is quite possible to re-structure that loop without resorting to use of the comma operator in scalar context. But in Perl’s spirit of TMTOWTDI, the ++$i, --$j syntax is provided for convenience. That’s my take on it, anyway.

        Hope that helps,

        Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

        I'm trying to remember the other language where the final semicolon is wrong.
        Pascal, at least "earlier versions of" ( Wikipedia supports my recollection). To me, it seemed totally logical at that time, because we were shown the syntax diagrams.

        Perhaps someone can point up an example where it's helpful?

        You will need it to create lists, for one, as in: ( 1, 5, 17 )

        Otherwise it allows you to avoid blocks in unusual places like: do_whatever and log_this, dump_that;

        Cheers, Sören

        Créateur des bugs mobiles - let loose once, run everywhere.
        (hooked on the Perl Programming language)

        Rust? It returns the last statement's value iff there's no semicolon after it.