The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use perl5i::latest;

use Test::More;

# Subroutine, empty array
{
    my @result;
    my @array = ();
    @array->foreach(sub { push @result, $_[0] });

    is_deeply \@result, [];
}

# Subroutine, no signature
{
    my @result;
    my @array = (1,2,3,4);
    @array->foreach(sub { push @result, $_[0] });

    is_deeply \@result, [1,2,3,4];
}


# Subroutine with signature
{
   my @result;
   my @array = (1,2,3,4);
   @array->foreach(func($a,$b) { push @result, $a.$b });

   is_deeply \@result, ["12","34"];
}


# Subroutine with signature, wrong scale of arguments
# XXX Should this die?
{
   my @result;
   my @array = (1,2,3,4,5);
   @array->foreach(func($a,$b) {
       $b //= '';
       push @result, $a.$b
   });

   is_deeply \@result, ["12","34", "5"];
}


# Subroutine that takes no arguments
{
   my @result;
   my @array = (1,2,3,4,5);
   ok !eval { @array->foreach(func() {}); 1 };
   is $@, sprintf "Function passed to foreach takes no arguments at %s line %d.\n",
                  __FILE__, __LINE__-2;
}

done_testing;