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

Perl6::Overview::Control - Control Structure

=head1 DESCRIPTION

=head2 Loop Structures

    while EXPR { ... }
    until EXPR { ... }
    
    loop { ... };
    loop ($i = 0; $i < 10; $i++) { ... }

    repeat { ... } while EXPR;
    repeat { ... } until EXPR;
    repeat while EXPR { ... }
    repeat until EXPR { ... }
    
=head2 For Loop structures

    for @foo { ... }
    for @foo -> $x { ... }
    for @foo -> $x, $y, $z { ... }
    for @foo.kv -> $index, $value { ... }
    
    for %hash.kv -> $key, $value { ... }
    
    for =<> {...} # was while (<>) { ... } in p5
    
=head2 Switch/Case style control elements

    given $x { ... }   # $x is now topic for block
    when EXPR { ... }  # perform $_ ~~ EXPR execute block and break
    default { ... }    # same as when true { ... }    

=head2 Closure traits

    BEGIN { ... }      # Body executed at compile-time, as soon as possible
    CHECK { ... }      # Body executed at compile-time, as last as possible
    INIT  { ... }      # Body executed at runtime, as soon as possible
    END   { ... }      # Body executed at runtime, as last as possible
    START { ... }      # Body only executed once (per clone), inline

    sub foo {
      START {
        # Initialize environment, e.g. create some files, etc.
      }

      ...;
    }
    foo();  # Runs initialization block
    foo();  # Does not run initialization block again
    foo();  # ditto

=cut