#!/usr/bin/env perl -w
use strict;
package MyEnum;

sub new {
    my ($class, @x) = @_;
    return bless [ @x ], $class;
}

sub each {
    my ($self, $cb) = @_;

    my $i = 0;
    for my $x (@$self) {
        local $_ = $x;
        $cb->($i++);
    }
    return $self;
}

sub map {
    my ($self, $cb) = @_;

    my @r = ();
    my $i = 0;
    for my $x (@$self) {
        local $_ = $x;
        push @r, $cb->($i++);
    }
    return __PACKAGE__->new(@r);
}

package main;
use Test::More;
use PerlX::MethodCallWithBlock;

my $array = MyEnum->new(1..10);

$array->map {
    2 * $_
}->each {
    is($_ % 2, 0, "Chained each");
};

done_testing;