The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*- Mode: Python -*-

use warnings;

package Foo;
sub bar (&);
sub foo (&);
sub twice (&);

use Test::More 'no_plan';
use Acme::Pythonic debug => 0;

# ----------------------------------------------------------------------

sub mygrep (&@):
    my $code = shift
    my @result
    foreach @_:
        push @result, $_ if &$code
    return @result

my @array = mygrep { $_ % 2 } 0..5
is_deeply \@array, [1, 3, 5]

@array = mygrep:
    my $aux = $_
    $aux *= 3
    $aux += 1
    $aux % 2
reverse 0..5
is_deeply \@array, [4, 2, 0]

# ----------------------------------------------------------------------

package Bar
@array = Foo::mygrep { $_ % 2 } 0..5
Test::More::is_deeply \@array, [1, 3, 5]

@array = Foo::mygrep:
    my $aux = $_
    $aux *= 3
    $aux += 1
    $aux % 2
reverse 0..5
Test::More::is_deeply \@array, [4, 2, 0]
package Foo

# ----------------------------------------------------------------------

$n = 1
sub foo (&):
    my $code = shift
    if defined $code:
        return 5
    else:
        return 7

$n = foo:
    pass
is $n, 5

# ----------------------------------------------------------------------

$n = 1
sub bar (&):
    my $code = shift
    $code->()

$n = bar:
    2*3
Test::More::is $n, 6

# ----------------------------------------------------------------------

sub twice (&):
    my $code = shift
    $code->()
    $code->()

$n = "foo"
twice:
    $n .= "bar"
    $n .= "baz"

is $n, "foobarbazbarbaz"