The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Explanation of How Hangman Operates

sub cls

Returns nothing.

Checks the magical lexical (S02) $?OS against a junction consisting of 3 values. Use the ternary operator ?? !! to decide what system command to use to clear the screen.

sub get_committer_list

err is the low precedence form of // (S03). // is especially useful in its assignment form:

    $x //= $y;

To summarize, || and or relate to truth, while // and err relate to definedness.

Next, we use smart matching, ~~, to skip all of the lines from the beginning of the file which have something other than whitespace.

In the loop that follows:

    for (=$dict) -> $name {

we use the unary = to perform a readline operation on the filehandle.

sub draw_board

We look over the numbers which are the indices to the elements of the array @letters by forcing the array into numerical context:

    for (0 .. (+@letters - 1)) -> $i {

Now, ~= might throw you. You Perl 5'ers are seeing the regexp matching operator in reverse. But what you should be seeing is the Perl 6 string concatenation operator (~) followed by an equal sign. Which therefore means that

  $output ~= @letters[$i]; 

translates to:

  $output = $output ~ @letters[$i] ;

sub has_won

In the grep here:

    @letters == @solution.grep:{ $_ ne '' };

the block beginning with a colon is called an adverbial block. It is equivalent with:

    grep(@solutions: { $_ ne '' })

In both cases, @solutions is the invocant, and the block is the argument.

sub guess

The loop construction (S04) is used without the the statement modifiers until or <while> which it can take.

sub draw_if_greater_than

    sub draw_if_greater_than (Str $char, Int $num) returns Bool { 
        ($number_of_bad_guesses >= $num) ?? $char !! ' ';
    }

The character for blank should be a constant, e.g.:

    my constant $BLANK = ' ';

but it is not implemented yet.

sub draw_hangman

Here we see function interpolation, i.e. the use of { ... } blocks inside strings.

## main loop

Note that the list-context x in Perl 5 is now xx in Perl 6:

    @solution = ('' xx +@letters);

ERRATA

If you read Apocalypse 03, you will see strong motivation for changing the ternary operator syntax.

AUTHOR

Terrence "metaperl" Brannon

Substantial #perl6 help from

  mauke, ninereaons, revdiablo, autrijus, stevan