Getopt::Long问题求教

Getopt::Long问题求教

我现在想通过Getopt::Long实现读入命令行输入,其中有两个参数,一个叫SearchIndex,一个叫Keyword,但是Keyword可能有多个单词组成,比如说Sony Cybershot T20,所以我想用数组:

$searchIndex;
@Keyword;
GetOptions ('SearchIndex=s' => \$searchIndex, 'Keyword=s@{1,}' => \@Keyword);

在windows下运行成功,但是在unix下运行的时候报错:Error in option spec: 'Keyword=s@{1,}'.
我想知道为什么这样不行,求达人指教,谢谢了!
Options with multiple values

       Options sometimes take several values. For example, a program could use
       multiple directories to search for library files:

           --library lib/stdlib --library lib/extlib

       To accomplish this behaviour, simply specify an array reference as the
       destination for the option:

           GetOptions ("library=s" => \@libfiles);

       Alternatively, you can specify that the option can have multiple values
       by adding a "@", and pass a scalar reference as the destination:

           GetOptions ("library=s@" => \$libfiles);


[Copy to clipboard] [ - ]
CODE:
use strict;
use warnings;
use Getopt::Long;
my $search;
my @keyword;
GetOptions("search=s" => \$search,
           "keyword=s" =>\@keyword,);
print "\$search -->$search\n";
print "\@keyword --->@keyword\n";

运行结果

QUOTE:
<lig@other-server:~/chinaunix>$ ./keyword.pl --search a --keyword a --keyword b $search -->a
@keyword --->a b

谢谢,但是如果我想输入的命令行是keyword.pl --search a --keyword a  b
然后让keyword返回a b,应该怎么写呢?
为什么我那程序在windows下可以执行,在unix下就报错呢?


QUOTE:
原帖由 stale 于 2008-1-31 17:16 发表
谢谢,但是如果我想输入的命令行是keyword.pl --search a --keyword a  b
然后让keyword返回a b,应该怎么写呢?
为什么我那程序在windows下可以执行,在unix下就报错呢?

因为windows和unix是不同的系统
activeperl的模块和unix里面的perl模块实现是不一样的
如果你的命令行参数里面只有--option argument1 argument2 这样的选项
那么你直接对@ARGV进行处理好了
没有必要使用Getopt::Long模块了

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
use strict;
use warnings;
my $key;
my %hash;
for(@ARGV){
if (/^--(.+)/){
$key = $1;
next;
}
$hash{$key}.= "$_ ";
}
my $search = $hash{"search"};
my @keyword = split /\s+/,$hash{"keyword"};
print "\$search = $search\n";
print "\@keyword = @keyword\n";

运行结果

QUOTE:
<lig@other-server:~/chinaunix>$ ./modify  --search a --keyword a b sfs
$search = a
@keyword = a b sfs

<lig@other-server:~/chinaunix>$ ./modify  --search a --keyword a b sf
$search = a
@keyword = a b sf

谢谢churchmice了!