Sub-Meta
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Sub/Meta.pm view on Meta::CPAN
sub _croak { require Carp; goto &Carp::croak }
sub new {
my ($class, @args) = @_;
my %args = @args == 1 && (ref $args[0]||"") ne "HASH" ? _croak "single arg must be hashref"
: @args == 1 ? %{$args[0]}
: @args;
my $self = bless \%args => $class;
$self->set_sub(delete $args{sub}) if exists $args{sub}; # build subinfo
$self->set_subname(delete $args{subname}) if exists $args{subname};
$self->set_stashname(delete $args{stashname}) if exists $args{stashname};
$self->set_fullname(delete $args{fullname}) if exists $args{fullname};
$self->set_is_method($self->_normalize_args_is_method(\%args));
$self->set_parameters($self->_normalize_args_parameters(\%args));
$self->set_returns($args{returns});
lib/Sub/Meta/Creator.pm view on Meta::CPAN
}
unless (ref $args{finders} && ref $args{finders} eq 'ARRAY') {
_croak 'finders must be an arrayref'
}
unless (List::Util::all { ref $_ && ref $_ eq 'CODE' } @{$args{finders}}) {
_croak 'elements of finders have to be a code reference'
}
return bless \%args => $class;
}
sub sub_meta_class { return 'Sub::Meta' }
sub finders { my $self = shift; return $self->{finders} }
sub find_materials {
my ($self, $sub) = @_;
for my $finder (@{$self->finders}) {
my $materials = $finder->($sub);
lib/Sub/Meta/Param.pm view on Meta::CPAN
my %args = @args == 1 ? ref $v && (ref $v eq 'HASH') ? %{$v}
: ( type => $v )
: @args;
$args{optional} = !delete $args{required} if exists $args{required};
$args{named} = !delete $args{positional} if exists $args{positional};
$args{type} = delete $args{isa} if exists $args{isa};
%args = (%DEFAULT, %args);
return bless \%args => $class;
}
sub name() { my $self = shift; return $self->{name} // '' }
sub type() { my $self = shift; return $self->{type} }
sub default() { my $self = shift; return $self->{default} } ## no critic (ProhibitBuiltinHomonyms)
sub coerce() { my $self = shift; return $self->{coerce} }
sub optional() { my $self = shift; return !!$self->{optional} }
sub required() { my $self = shift; return !$self->{optional} }
sub named() { my $self = shift; return !!$self->{named} }
sub positional() { my $self = shift; return !$self->{named} }
lib/Sub/Meta/Parameters.pm view on Meta::CPAN
;
sub _croak { require Carp; goto &Carp::croak }
sub param_class { return 'Sub::Meta::Param' }
sub new {
my ($class, @args) = @_;
my %args = @args == 1 ? %{$args[0]} : @args;
my $self = bless \%args => $class;
$self->set_args($args{args}) if exists $args{args};
$self->set_invocant(delete $args{invocant}) if defined $args{invocant};
$self->set_nshift(delete $args{nshift}) if defined $args{nshift};
$self->set_slurpy(delete $args{slurpy}) if defined $args{slurpy};
return $self;
}
sub nshift() { my $self = shift; return $self->{nshift} // 0 }
sub slurpy() { my $self = shift; return $self->{slurpy} }
lib/Sub/Meta/Returns.pm view on Meta::CPAN
eq => \&is_same_interface
;
sub new {
my ($class, @args) = @_;
my $v = $args[0];
my %args = @args == 1 ? ref $v && ref $v eq 'HASH' ? %{$v}
: ( scalar => $v, list => $v, void => $v )
: @args;
return bless \%args => $class;
}
sub scalar() :method { my $self = shift; return $self->{scalar} } ## no critic (ProhibitBuiltinHomonyms)
sub list() { my $self = shift; return $self->{list} }
sub void() { my $self = shift; return $self->{void} }
sub coerce() { my $self = shift; return $self->{coerce} }
sub has_scalar() { my $self = shift; return defined $self->{scalar} }
sub has_list() { my $self = shift; return defined $self->{list} }
sub has_void() { my $self = shift; return defined $self->{void} }
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.909 second using v1.00-cache-2.02-grep-82fe00e-cpan-9e6bc14194b )