检查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返回匹配元素的计数.

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...