NAME
Sub::Meta::Creator - creator of Sub::Meta by code reference
SYNOPSIS
use Sub::Meta::Creator;
sub finder {
my $sub = shift;
return +{ sub => $sub }
}
my $creator = Sub::Meta::Creator->new(
finders => [ \&finder ],
);
sub foo { }
my $meta = $creator->create(\&foo);
DESCRIPTION
This module provides convenient ways to create Sub::Meta. The purpose of this module is to make it easier to associate Sub::Meta with information of code references. For example, Function::Parameters can retrieve not only subroutine names and packages from code references, but also argument type information, etc. Sub::Meta::Creator can be generated Sub::Meta with such information:
use Sub::Meta::Creator;
use Sub::Meta::Finder::FunctionParameters;
my $creator = Sub::Meta::Creator->new(
finders => [ \&Sub::Meta::Finder::FunctionParameters::find_materials ]
);
use Function::Parameters;
use Types::Standard -types;
fun hello(Str $msg) { }
my $meta = $creator->create(\&hello);
my $args = $meta->args; # [ Sub::Meta::Param->new(name => '$msg', type => Str) ]
METHODS
new
Constructor of Sub::Meta::Creator
. This constructor requires finders:
my $creator = Sub::Meta::Creator->new(
finders => [ sub { my $sub = shift; +{ sub => $sub } } ]
);
finders
Return elements of finder. The type of finders is ArrayRef[CodeRef]
. CodeRef
, an element of finders, finds information from the code reference of the first argument, processes the information to become the argument of Sub::Meta#new
, and returns it.
find_materials($sub)
From the code reference, find the material for Sub::Meta#new
.
create($sub)
From the code reference, create the instance of Sub::Meta
.
sub_meta_class
Returns class name of Sub::Meta. default: Sub::Meta Please override for customization.
LICENSE
Copyright (C) kfly8.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
kfly8 <kfly@cpan.org>