7

我有一个脚本,可以使用Getopt::Long. 某些标志不允许混用,例如:--linux --unix不允许一起提供。我知道我可以使用if语句进行检查。有没有更清洁和更好的方法来做到这一点?

if如果我不想允许许多标志组合,块可能会变得丑陋。

4

1 回答 1

4

Getopt::Long似乎没有这样的功能,在快速搜索 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));
于 2012-04-24T14:12:13.157 回答