Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

48 lines (32 sloc) 1.207 kb
=begin pod
=TITLE class Block
class Block is Code { }
A C<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 C<$_>
as a positional argument
my $block = { uc $_; };
say $block.WHAT; # Block
say $block('hello'); # HELLO
A block can have a signature between C<< -> >> or C<< <-> >> and the block:
my $add = -> $a, $b { $a + $b };
say $add(38, 4); # 42
If the signature is introduced with C<< <-> >>, then the parameters are marked
as C<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 C<Routine> (which is a subclass of C<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;
=end pod
Jump to Line
Something went wrong with that request. Please try again.