The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More tests => 36;

use lib '../lib';

use Begin::Declare;

{
    MY $x = 3; eval 'is $x, 3'; BEGIN {eval 'is $x, 3'}

    MY ($y, $z) = (4, 5); eval 'is "$x $y $z", "3 4 5"'; BEGIN {eval 'is "$x $y $z", "3 4 5"'}

    MY @array = 1 .. 4; eval 'is "@array", "1 2 3 4"';   BEGIN {eval 'is "@array", "1 2 3 4"'}

    MY ($q, %hash) = ('qqq', a => 1, b => 2);
    BEGIN {
        eval 'is $q, "qqq"';
        eval 'is join(" ", sort keys %hash), "a b"';
    }
    eval 'is $q, "qqq"';
    eval 'is join(" ", sort keys %hash), "a b"';
}

{
    OUR $x = 3; eval 'is $x, 3'; BEGIN {eval 'is $x, 3'}

    OUR ($y, $z) = (4, 5); eval 'is "$x $y $z", "3 4 5"'; BEGIN {eval 'is "$x $y $z", "3 4 5"'}

    OUR @array = 1 .. 4; eval 'is "@array", "1 2 3 4"';   BEGIN {eval 'is "@array", "1 2 3 4"'}

    OUR ($q, %hash) = ('qqq', a => 1, b => 2);
    BEGIN {
        eval 'is $q, "qqq"';
        eval 'is join(" ", sort keys %hash), "a b"';
    }
    eval 'is $q, "qqq"';
    eval 'is join(" ", sort keys %hash), "a b"';
}

{
    {
        MY
        (
            $
            x
            ,
            $
            y
            ,
            $
            z
            ,
        )
        =
        (
            11,
            22,
            33,
        )
        ;
        BEGIN {eval 'is "$x $y $z", "11 22 33"'}
        eval 'is "$x $y $z", "11 22 33"';
    }
    {
        OUR
        $
        x1
        =
        11
        ;
        BEGIN {eval 'is $x1, 11'}
        eval 'is $x1, 11';
    }
}

{
    my $ret = MY $RET = 5;
    is $ret, 5;
    eval 'is $RET, 5';
    BEGIN {eval 'is $RET, 5'}
}

{
    my @ret = MY ($a, $b, @c) = 1 .. 5;
    is "@ret", '1 2 3 4 5';
    eval 'is "@c $a $b", "3 4 5 1 2"';
    BEGIN {eval 'is "@c $a $b", "3 4 5 1 2"'}
}

{
    my $ret = OUR $RET = 5;
    is $ret, 5;
    eval 'is $RET, 5';
    BEGIN {eval 'is $RET, 5'}
}

{
    my @ret = OUR ($ax, $bx, @cx) = 1 .. 5;
    is "@ret", '1 2 3 4 5';
    eval 'is "@cx $ax $bx", "3 4 5 1 2"';
    BEGIN {eval 'is "@cx $ax $bx", "3 4 5 1 2"'}
}