App-NDTools
view release on metacpan or search on metacpan
lib/App/NDTools/NDProc/Module.pm view on Meta::CPAN
sub parse_args {
my ($self, $args) = @_;
unless (GetOptionsFromArray ($args, $self->arg_opts)) {
$self->usage;
die_fatal "Unsupported opt passed", 1;
}
if ($self->{OPTS}->{help}) {
$self->usage;
die_info, 0;
}
if ($self->{OPTS}->{version}) {
print $self->VERSION . "\n";
die_info, 0;
}
die_fatal $self->{ARG_ERROR}, 1 if (defined $self->{ARG_ERROR});
$self->configure;
return $self;
}
sub process {
my ($self, $data, $opts, $source) = @_;
$self->check_rule($opts) or die_fatal undef, 1;
$self->stash_preserved($data, $opts->{preserve})
if ($opts->{preserve});
for my $path (@{$opts->{path}}) {
if (ref $path) { # complex paths passed to mod as is
$self->process_path($data, $path, undef, $opts, $source);
} else {
log_debug { "Processing path '$path'" };
my $spath = eval { str2path($path) };
die_fatal 'Failed to parse path ' . chomp_evaled_error($@), 4
if ($@);
$self->process_path($data, $path, $spath, $opts, $source);
}
}
$self->restore_preserved($data)
if ($opts->{preserve});
return $self;
}
sub restore_preserved {
my ($self, $data) = @_;
while (@{$self->{_preserved}}) {
my ($path, $value) = splice @{$self->{_preserved}}, 0, 2;
log_debug { "Restoring preserved '" . path2str($path) . "'" };
path(${$data}, $path, assign => $value, expand => 1);
}
return $self;
}
sub stash_preserved {
my ($self, $data, $paths) = @_;
for my $path (@{$paths}) {
log_debug { "Preserving '$path'" };
my $spath = eval { str2path($path) };
die_fatal "Failed to parse path ($@)", 4 if ($@);
push @{$self->{_preserved}},
map { $_ = ref $_ ? dclone($_) : $_ } # immutable now
path(${$data}, $spath, deref => 1, paths => 1);
}
return $self;
}
sub usage {
require Pod::Find;
require Pod::Usage;
Pod::Usage::pod2usage(
-exitval => 'NOEXIT',
-input => Pod::Find::pod_where({-inc => 1}, ref(shift)),
-output => \*STDERR,
-sections => 'NAME|DESCRIPTION|OPTIONS',
-verbose => 99
);
}
1; # End of App::NDTools::NDProc::Module
( run in 0.728 second using v1.01-cache-2.11-cpan-5623c5533a1 )