2012-04-24 52 views
6

我有一个脚本,可以使用Getopt::Long获得数十个参数/标志。 某些标志不允许混用,如:--linux --unix不允许一起提供。现在我知道我可以使用if声明进行检查,但我确信有更清晰和更好的方法来做到这一点。避免混合使用某些参数到脚本

if如果我不想允许多个标志组合,块可能会变得很难看。

有什么建议吗?

感谢,

回答

3

它似乎并不认为Getopt::Long具有这样的功能,并没有什么快速search of CPAN后伸出。但是,如果你可以使用哈希来存储你的选择,创建自己的功能似乎并不太难看:

use warnings; 
use strict; 
use Getopt::Long; 

my %opts; 
GetOptions(\%opts, qw(
    linux 
    unix 
    help 
)) or die; 

mutex(qw(linux unix)); 

sub mutex { 
    my @args = @_; 
    my $cnt = 0; 
    for (@args) { 
     $cnt++ if exists $opts{$_}; 
     die "Error: these options are mutually exclusive: @args" if $cnt > 1; 
    } 
} 

这也扩展到超过2种选择:

mutex(qw(linux unix windoze));