1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
package Getopt::ArgParse::ActionStore;
use strict;
use warnings;
use Carp;
use Getopt::ArgParse::Parser;
sub apply {
my $self = shift;
my ($spec, $namespace, $values) = @_;
$values ||= [];
return sprintf(
'%s can only have one value',
$spec->{dest},
) if @$values > 1;
if ($spec->{type} == Getopt::ArgParse::Parser::TYPE_BOOL) {
# If there is default true or false
my $default = $spec->{default} || [ 0 ];
if (@$values) {
# Negate the default if the arg appears on the command
# line
$namespace->set_attr($spec->{dest}, !$default->[0]);
} else {
$namespace->set_attr($spec->{dest}, $default->[0]);
}
# make no_arg available
$namespace->set_attr( 'no_' . $spec->{dest}, !$namespace->get_attr($spec->{dest}) );
return;
}
# Don't set it to undef. We may operate on a namespace with this
# attr already set. In that case we don't want to override it.
return unless @$values;
my $v = $values->[0];
$namespace->set_attr($spec->{dest}, $v);
return '';
}
1;
=head1 NAME
Getopt::ArgParse::ActionStore - Utility functions internal to Getopt::ArgParse
=head1 AUTHOR
Mytram <mytram2@gmail.com> (original author)
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2014 by Mytram.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)
=cut
|