package Fiber; use strict; use warnings; use Carp (); sub new (&@) { my $code = shift; bless { code => $code, block => 0, now => 0, }, __PACKAGE__; } sub run (&@) { Carp::croak q!Can't call Fiber::run {} outside Fiber::new {} block!; } sub yield (&@) { Carp::croak q!Can't call Fiber::yeild {} outside Fiber::new {} block!; } sub resume { my $self = shift; return if $self->{block} < 0; unless ($self