Звучит так, будто вы хотите написать некоторые объявления пользовательских атрибутов, которые предоставляют некоторые параметры по умолчанию. Это описано в Moose :: Cookbook :: Extennding :: Recipe1 , например ::
package MyApp::Mooseish;
use Moose ();
use Moose::Exporter;
Moose::Exporter->setup_import_methods(
install => [ qw(import unimport init_meta) ],
with_meta => ['has_table'],
also => 'Moose',
);
sub has_table
{
my ($meta, $name, %config) = @_;
$meta->add_attribute(
$name,
# overridable defaults.
is => 'rw',
isa => 'Value', # any defined non-reference; hopefully the caller
# passed their own type, which will override
# this one.
# other options you may wish to supply, or calculate based on
# other arguments passed to this function...
%config,
);
}
А потом в вашем классе:
package MyApp::SomeObject;
use MyApp::Moosish;
has_table => (
# any normal 'has' options;
# will override the defaults.
);
# remaining class definition as normal.