微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检查perl的getopt中的多个互斥选项

如何检查只定义-a或-b或-c中的一个

所以不是-a -b,也不是-a -c,也不是-b -c,也不是-a -b -c.

现在有了

use strict;
use warnings;
use Carp;
use Getopt::Std;

our($opt_a,$opt_b,$opt_c);
getopts("abc");

croak("Options -a -b -c are mutually exclusive")
        if ( is_here_multiple($opt_a,$opt_c,$opt_c) );

sub is_here_multiple {
        my $x = 0;
        foreach my $arg (@_) { $x++ if (defined($arg) || $arg); }
        return $x > 1 ? 1 : 0;
}

以上是有效的,但不是很优雅.

Here已经是类似的问题,但这是不同的,因为检查两个独占值很容易 – 但这里有多个.

解决方法

或者你可以:

die "error" if ( scalar grep { defined($_) || $_  } $opt_a,$opt_c  ) > 1;

标量上下文中的grep返回匹配元素的计数.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐