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 )