ayu*_*hgp 3 perl command-line-interface
我正在尝试在perl中创建一个接受多个CLI args的CLI脚本.我正在使用该GetOptions函数解析这些参数.我有两个选项--foo,--bar其中一个必须与传递给它的相应值一起出现.
有没有办法直接在GetOptions中处理这个?或者我是否必须手动为此检查?
我正在使用该Getopt::Long模块.
编辑:当我说:
我有两个选项
--foo,--bar其中一个必须与传递给它的相应值一起出现.
我的意思是说这些应该是CLI参数,可以用作:
$ perl my-cli-script.pl --foo somevalue
$ #Or
$ perl my-cli-script.pl --bar someothervalue
Run Code Online (Sandbox Code Playgroud)
但不是
$ perl my-cli-script.pl --foo somevalue --bar someothervalue
$ #or
$ perl my-cli-script.pl
Run Code Online (Sandbox Code Playgroud)
然后检查一下.
GetOptions(
"help|h|?" => \&help,
"foo=s" => \$opt_foo,
"bar=s" => \$opt_bar,
)
or usage();
defined($opt_foo) || defined($opt_bar) )
or usage("Must specify --foo or --bar");
!( defined($opt_foo) && defined($opt_bar) )
or usage("Can't specify both --foo and --bar");
@ARGV == 0
or usage("Too many arguments");
Run Code Online (Sandbox Code Playgroud)
样品usage:
sub usage {
if ( my ($msg) = @_ ) {
chomp($msg);
warn("$msg\n");
}
my $prog = basename($0);
warn("Try `$prog --help' for more information.\n");
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
我发现这是了解很少使用的xor(异或)运算符的最佳时机。
GetOptions(
"foo=s" => \my $foo,
"bar=s" => \my $bar,
) or die "Bad options";
unless ( defined $foo xor defined $bar ) {
die "You must specify either --foo or --bar, but not both";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |