sub iter_to_seq { my ($iter) = @_; sub { my $val = $iter->(); defined $val ? ($val) : (); }; } sub seq_to_iter { my ($seq) = @_; sub { my @val = $seq->(); @val ? [@val] : undef; }; } enumerate_iter( seq_to_iter( iter_to_seq( iter( qw[a b c] ) ) ) ); # 0: (['a']) # 1: (['b']) # 2: (['c'])