perl6/doc/lib/Block

doc src
(title) class Block
    class Block is Code { }

 
A Block is a code object meant for small-scale code reuse. A block is created syntactically by a list of statements enclosed in curly brackets. Without an explicit signature or placeholder arguments, a block has $_ as a positional argument
    my $block = { uc $_; };
    say $block.WHAT;            # Block
    say $block('hello');        # HELLO

 
A block can have a signature between < - >> or < <- >> and the block:
    my $add = -> $a, $b { $a + $b };
    say $add(38, 4);            # 42

 
If the signature is introduced with < <- >>, then the parameters are marked as rw by default:
    my $swap = <-> $a, $b { ($a, $b) = ($b, $a) };

    my ($a, $b) = (2, 4);
    $swap($a, $b);
    say $a;                     # 4

 
Blocks that aren't of type Routine (which is a subclass of Block ) are transparent to L<return>.
    sub f() {
        say <a b c>.map: { return 42 };
                       #   ^^^^^^   exits &f, not just the block
    }

 
Bare blocks in sink context are automatically executed:
    say 1;
    {
        say 2;                  # executed directly, not a Block object
    }
    say 3;

 

Perl 6 Tricks and Treats newsletter

Register to the free newsletter now, and get updates and news.
Email:
Name: