hakobe (owner)

Revisions

gist: 82701 Download_button fork
public
Public Clone URL: git://gist.github.com/82701.git
Embed All Files: show embed
fiber.pl #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use strict;
use warnings;
use Coro::State;
use Perl6::Say;
 
my $resume;
my $yield;
my $func;
{
    my $ret;
    my $main;
    my $state;
 
    $main = Coro::State->new;
    $state = Coro::State->new(sub {
        $func->();
    });
    
    $resume = sub {
        $main->transfer($state);
        $ret;
    };
 
    $yield = sub {
        $ret = shift;
        $state->transfer($main);
    };
}
 
$func = sub {
    my $n = 0;
    while (1) {
        $yield->($n++);
    }
};
 
say $resume->();
say $resume->();
say $resume->();