File: ActionStore.pm

package info (click to toggle)
libgetopt-argparse-perl 1.0.6-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 348 kB
  • sloc: perl: 1,133; makefile: 2
file content (67 lines) | stat: -rw-r--r-- 1,469 bytes parent folder | download | duplicates (3)
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