BGS
view release on metacpan or search on metacpan
if ($limit > 0 and keys %fh2data >= $limit) {
push @to_call, $data;
} else {
_call($data);
}
return $data;
}
sub bgs_call(&$) {
my ($sub, $callback) = @_;
my $data = _bgs_call($sub, $callback);
return $$data{vpid};
}
sub bgs_back(&) { shift }
sub bgs_wait(;$) {
my ($waited) = @_;
if ($waited and not exists $vpid2data{$waited} and not grep { $$_{vpid} eq $waited } @to_call) {
return;
}
local $SIG{PIPE} = "IGNORE";
BGS/Future.pm view on Meta::CPAN
}
}
sub cancel {
my $self = shift;
BGS::bgs_break($$self{vpid});
}
sub future(&) {
__PACKAGE__->new($_[0]);
}
1;
__END__
BGS/Limit.pm view on Meta::CPAN
our @ISA = qw(Exporter);
our @EXPORT = qw(bgs_call bgs_back bgs_wait bgs_break);
our $VERSION = '0.12';
use BGS ();
my @jobs = ();
sub bgs_call(&$) { push @jobs, \@_ }
sub bgs_back(&) { shift }
sub do_job {
my $job = shift @jobs or return;
my ($sub, $callback) = @$job;
&BGS::bgs_call($sub, sub {
my $r = shift;
$callback->($r);
do_job();
});
( run in 0.303 second using v1.01-cache-2.11-cpan-49f99fa48dc )