Argon
view release on metacpan or search on metacpan
lib/Argon/Util.pm view on Meta::CPAN
package Argon::Util;
# ABSTRACT: Utilities used in Argon classes
$Argon::Util::VERSION = '0.18';
use strict;
use warnings;
use Carp;
use AnyEvent;
use Scalar::Util qw(weaken);
use Argon::Log;
use parent 'Exporter';
our @EXPORT_OK = (
qw(K param interval),
);
sub K ($$;@) {
my $name = shift;
my $self = shift;
my @args = @_;
my $method = $self->can($name);
unless ($method) {
croak "method $name not found";
}
weaken $self;
weaken $method;
sub { $method->($self, @args, @_) };
}
sub param ($\%;$) {
my $key = shift;
my $param = shift;
if (!exists $param->{$key} || !defined $param->{$key}) {
if (@_ == 0) {
croak "expected parameter '$key'";
}
else {
my $default = shift;
return (ref $default && ref $default eq 'CODE')
? $default->()
: $default;
}
}
else {
return $param->{$key};
}
}
sub interval (;$) {
my $intvl = shift || 1;
my $count = 0;
return sub {
my $reset = shift;
if ($reset) {
$count = 0;
return;
}
my $inc = log($intvl * ($count + 1));
++$count;
return $intvl + $inc;
};
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Argon::Util - Utilities used in Argon classes
=head1 VERSION
version 0.18
( run in 1.295 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )