Coro-Generator

 view release on metacpan or  search on metacpan

lib/Coro/Generator.pm  view on Meta::CPAN

our @EXPORT = qw(generator yield);
our $VERSION = '0.02';

our @yieldstack;
our $retval;
our @params;

sub generator (&) {
  my $code = shift;
  my $prev = new Coro::State;
  my $coro = Coro::State->new(sub {
    yield();
    $code->(@params) while 1;
  });
  push @yieldstack, [$coro, $prev];
  $prev->transfer($coro);
  return sub {
    @params = @_;
    push @yieldstack, [$coro, $prev];
    $prev->transfer($coro);
    return $retval;
  };
}

sub yield {
  $retval = shift;
  my ($coro, $prev) = @{pop @yieldstack};
  $coro->transfer($prev);
  return wantarray ? @params : $params[0];
}

=head1 SEE ALSO

L<Coro>

=head1 AUTHOR

Brock Wilcox, E<lt>awwaiid@thelackthereof.orgE<gt>



( run in 0.339 second using v1.01-cache-2.11-cpan-3cd7ad12f66 )