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 transfer encia 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