#!/usr/bin/env perl
use warnings;
use strict;
use Getopt::Long qw(:config gnu_getopt);
my %options = (
'help' => +{spec => 'help|?|h', value => undef },
# default output is "short" options
'long' => +{spec => 'long-options|l!', value => undef },
# count of options printed each line
'width' => +{spec => 'width|w=i', value => 4},
# verbose mode, report each option hit as scanning
'verbose' => +{spec => 'verbose|v!', value => 0},
# dummy option
'option1' => +{spec => 'option1|o=s', value => undef},
);
GetOptions(
map {;
$options{$_}{spec} =>
(ref($options{$_}{value}) ? $options{$_}{value} : \$options{$_}{value});
} keys(%options)
);
if ($options{help}{value}) { usage(); }
## 這裏是要特殊處理的地方
if (defined($options{option1}{value})) {
my @items = split '\s*,\s*', $options{option1}{value};
$options{option1}{value} = \@items;
}
### option dumping
print "Your options:\n";
foreach (keys(%options)) {
printf " %s: %s\n", $_, argument_value($options{$_}{value});
}
exit 0;
sub argument_value {
my ($val) = @_;
unless (defined($val)) {
return '<undef>';
}
if (ref($val)) {
if (ref($val) eq 'ARRAY') {
return "[" . join(" ", @$val) . "]";
} else { ## ignore other types
return "<UNKNOWN>";
}
} else {
# scalar
return $val;
}
}
sub usage {
(my $PROG = $0) =~ s/^.*\///;
print <<EOF;
USAGE
$PROG OPTIONS
OPTIONS:
-l, --long Long options switch
-w, --width=N Number of options to print each line
-h, --help This help screen
COPYRIGHT
(C) 2010 XXX XXXXXXX, <XXX\@gmail.com>
EOF
exit 1;
}
目前無法理解的命令行處理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.