Thread Probleme mit GetOpt::Long (19 answers)
Opened by YAPD at 2019-06-23 15:58

Linuxer
 2019-06-28 01:03
#190155 #190155
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Mit eckigen Klammern kannst Du eine neue, anonyme Array-Referenz erzeugen.

Code (perl): (dl )
1
2
3
4
my @arr = (1,2,3);

# referenz auf array mit den Inhalten von @arr
my $ref = [ @arr ];


Wenn jetzt @arr Deine Parameter für eine Option enthielte, musst Du eben auch daran denken, den Array zu leeren, wenn eine neue Option auftaucht, damit die Parameter der vorigen Option nicht übernommen werden.

Hier ein Beispiel:

Code (perl): (dl )
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
#! /usr/bin/perl
use strict;
use warnings;

use 5.020;

#> sub routines
#> --------------------------------------------------------------------

# own options parser
sub parse_options {

    my %data;
    my @args;
    my $option;

    for my $arg ( @ARGV ) {

        # stop parsing options
        if ( $arg eq "--" ) {
            last;
        }

        # if it starts with '-', it's an option
        # this means, arguments must not start with '-'
        elsif ( $arg =~ m/^-/ ) {
            # save previous option
            if ( $option ) {
                $data{$option} = @args ? [ @args ] : 1;
            }
            $option = $arg;
            @args = ();

        }
        # must be an argument
        else {
            push @args, $arg;
        }
    }

    # save last option
    if ( $option ) {
        $data{$option} = @args ? [ @args ] : 1;
    }

    return \%data;
}


#> main programm
#> --------------------------------------------------------------------

# parse options and get ref to hash of options
my $options_hRef = parse_options();

# control results
require Data::Dumper;
say Data::Dumper->new(
    [ $options_hRef ],
    [ '*options' ],
)->Sortkeys(1)->Useqq(1)->Dump;

__END__
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Probleme mit GetOpt::Long