Aion-Spirit
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Aion/Spirit.pm view on Meta::CPAN
package Aion::Spirit;
use 5.22.0;
no strict; no warnings; no diagnostics;
use common::sense;
our $VERSION = "0.0.1";
use Exporter qw/import/;
our @EXPORT = our @EXPORT_OK = grep {
*{$Aion::Spirit::{$_}}{CODE} && !/^(_|(NaN|import)\z)/n
} keys %Aion::Spirit::;
use Sub::Util qw//;
#@category ÐÑпекÑ-оÑиенÑиÑованное пÑогÑаммиÑование
# ÐбоÑаÑÐ¸Ð²Ð°ÐµÑ ÑÑнкÑии в пакеÑе в ÑказаннÑÑ Ð¿Ð¾ ÑегÑлÑÑке.
# ÐÐ¼Ñ ÑÑнкÑии идÑÑ Ð²Ð¼ÐµÑÑе Ñ Ð¿Ð°ÐºÐµÑом
sub aroundsub($$;$) {
my ($pkg, $re, $around) = @_==3? @_: (scalar caller, @_);
my $x = \%{"${pkg}::"};
for my $g (values %$x) {
next if ref \$g ne "GLOB";
my $sub = *{$g}{CODE};
if($sub && Sub::Util::subname($sub) =~ $re) {
*$g = wrapsub($sub => $around);
}
}
}
# ÐбоÑаÑÐ¸Ð²Ð°ÐµÑ ÑÑнкÑÐ¸Ñ Ð² дÑÑгÑÑ
sub wrapsub($$) {
my ($sub, $around) = @_;
my $s = sub { unshift @_, $sub; goto &$around };
my $subname = Sub::Util::subname $sub;
Sub::Util::set_subname "${subname}__AROUND" =>
Sub::Util::set_prototype Sub::Util::prototype($sub) => $s;
$s
}
#@category ÐÑовеÑки
# assert
sub ASSERT ($$) {
die "ASSERT: ".(ref $_[1]? $_[1]->(): $_[1])."\n" if !$_[0];
}
#@category СпиÑки
# ÐÑÐµÑ Ð² ÑпиÑке пеÑвое Ñовпадение и возвÑаÑÐ°ÐµÑ Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ð½Ð¾Ð³Ð¾ ÑлеменÑа
sub firstidx (&@) {
my $s = shift;
my $i = 0;
for(@_) {
return $i if $s->();
$i++;
}
return undef;
}
1;
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.546 second using v1.00-cache-2.02-grep-82fe00e-cpan-3b7f77b76a6c )