2012-04-24 54 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));