andrewb icon

parseArgs.pl

andrewb | PRO | 08/09/14 12:08:31 AM UTC | 0 ⭐ | 1324 👁️ | Never ⏰ | []
Perl |

1.18 KB

|

None

|

0 👍

/

0 👎

#!/usr/bin/perl -w
##########
# A couple of cool subroutines for parsing command line arguments.
# It's been done a thousand, thousand times but this is the first time I did it right.
##########
use Data::Dumper;
use strict;
use warnings;
 
sub splitArg {
    my $str = shift;
    return split(/=/, $str);
}
 
sub parseArgs {
    my %args = ();
    my $lastarg = "";
    foreach my $arg (@ARGV) {
        if (substr($arg, 0, 2) eq "--") {
            my $temp = substr($arg, 2);
            if ($arg !~ m/=/) {
                $lastarg = $temp;
            } else {
                my ($k, $v) = splitArg($temp);
                $args{$k} = $v;
            }
        }
        elsif (substr($arg, 0, 1) eq "-") {
            my $temp = substr($arg, 1);
            if ($arg !~ m/=/) {
                $lastarg = $temp;
            } else {
                my ($k, $v) = splitArg($temp);
                $args{$k} = $v;
            }
        }
        else {
            if (length($lastarg) > 0) {
                $args{$lastarg} = $arg;
                $lastarg = "";
            }
        }
    }
    return %args;
}
 
my %args = parseArgs();
 
print Dumper(%args);

Comments