App-MyPerl
view release on metacpan or search on metacpan
lib/App/MyPerl/Role/Script.pm view on Meta::CPAN
has config_dirs => (is => 'lazy', builder => sub {
my ($self) = @_;
[ grep defined && $_->is_executable,
$self->global_always_config_dir, $self->final_project_config_dir ]
});
sub use_files { qw(dev-modules modules) }
sub _files_for {
my ($self, $dir, $prefix) = @_;
map $dir->catfile($prefix.$_), $self->use_files
}
sub _build_module_list {
my ($self, $prefix) = @_;
[ grep !/^#/ && !/^\s*$/,
map $_->chomp->slurp,
grep $_->exists,
map $self->_files_for($_, $prefix),
@{$self->config_dirs}
]
}
has modules => (is => 'lazy', builder => sub {
$_[0]->_build_module_list('')
});
has script_modules => (is => 'lazy', builder => sub {
$_[0]->_build_module_list('script-')
});
has preamble => (is => 'lazy', builder => sub {
$_[0]->_preamble_from_modules(@{$_[0]->modules})
});
sub _preamble_from_modules {
my ($self, @modules) = @_;
[ map {
my ($mod, $arg) = split('=', $_, 2);
my $use_or_no = "use";
if ($mod =~ /^-/) {
$use_or_no = "no";
$mod =~ s/^-//;
}
($arg
? "$use_or_no ${mod} qw(".join(' ', split ',', $arg).");"
: "$use_or_no ${mod};")
} @modules
]
}
has perl_options => (is => 'lazy', builder => sub {
my ($self) = @_;
[
"-Mlib::with::preamble=${\join(' ', @{$self->preamble})},lib,t/lib",
(map "-M$_", @{$self->script_modules}, @{$self->modules})
];
});
sub run_if_script {
return 1 if caller(1);
shift->new->run;
}
1;
( run in 0.567 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )