- 论坛徽章:
- 0
|
本帖最后由 zeroxia 于 2010-04-19 13:23 编辑
option1的值先作为字符串读进来,然后你自己对这个字符串进行分析,按照你的格式提取你需要的内容。同时也要注意非法格式的问题。
昨天刚好写了个脚本,提取出来一部分改改供参考。
使用的时候,如果“包含空格”,可以这样:
# perl test.pl --option1 "1, 2, 3, 4"
也就是防止shell来给你split掉了。
建议自己看看文档就知道了:
# perldoc Getopt::Long- #!/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;
- }
复制代码 |
|