Thread Probleme mit GetOpt::Long
(19 answers)
Opened by YAPD at 2019-06-23 15:58
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! |