#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
use lib '../lib';
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++);
}
}
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 PerlX::MethodCallWithBlock;
my $x = MyEnum->new(0..10);
$x->each {
say 2 * $_ + 1;
};
say "----";
$x->map {
2 * $_ + 1
}->each {
say;
};