2012-07-01 47 views
1

我写了一个脚本,需要从用户那里得到几个参数。 尝试读取我的脚本参数时遇到问题。Getopt ::长缺失参数

脚本可以将-type用于运行一种文件类型的函数,或者可以获取标志-all以便监听所有文件类型。

my $opt = GetOptions (
    'help|h' => \$help, 
    'type=s' => \$type, 
    'all' => \$all, 
); 

我想考虑一下用户可以运行,发现用户 运行myscript.pl -type -all当模块读取-all-type字符串的所有错误的选项。

有没有优雅的方式来避免这种事情?

谢谢!

-Yair

+0

另请参阅:http://www.perlmonks.org/?node_id=1110506 – toolic

回答

3

允许任何-type-all,但不能同时使用。或者,删除-all选项,如果-type后跟all,请将其视为您正在尝试对待-all

my $opt = GetOptions (
    'help|h' => \$help, 
    'type=s' => \$type, 
    'all' => sub { $type = "all"; }, 
); 
+0

这正是我所做的。如果在GetOpt :: Long内部有内置解决方案来解决这些问题,我只想要。 – user1494264

+0

@ user1494264不是。无论如何,用'-all'指定'-type'的逻辑是什么? – robert

+0

@ user1494264,“内置”解决方案(如果回调不是内置的)将如何更简洁? – ikegami

2

使用'type:s'而不是'type=s'和型的值将是可选的。优雅?我不知道,但它很好。