El Módulo Coro::State

Coro usa el módulo Coro::State para la implementación de corutinas. Coro::State es una capa a un nivel inferior que da soporte a Coro. En Coro::State la transferencia de control es explícita y se hace con el método transfer. El programa anterior es equivalente a este (véase Coro::State):

pp2@nereida:~/src/perl/coro$ cat -n synopsistransfer.pl
 1  #!/usr/bin/perl
 2  use strict;
 3  use warnings;
 4  use Coro::State;
 5
 6  my ($main, $co);
 7  $co = Coro::State->new(sub {
 8     print "2\n";
 9     $co->transfer($main); # yield back to main
10     print "4\n";
11     $co->transfer($main); # yield back to main
12  });
13  $main = Coro::State->new; # The main coroutine
14  print "1\n";
15  $main->transfer($co); # yield to coroutine
16  print "3\n";
17  $main->transfer($co);
18  print "5\n";

Cuando se llama a Coro::State->new($coderef) se crea una nueva corutina. La primera transferencia a esta corutina comenzará la ejecución. Si la subrutina alcanza el punto de retorno todo el programa termina.

Si se omite el argumento $coderef se creará un objeto que guarda la corutina actual.

Casiano Rodríguez León
2010-03-22