我的计划如下:
use strict;
use warnings;
use Getopt::Long;
my @letters;
my @words;
GetOptions(
"letters=s{2}" => \@letters,
"words=s{,}" => \@words
);
print "Letters: " . join(", ", @letters) . "\n";
print "Words: " . join(", ", @words) . "\n";
当我运行这个程序时,我得到如下输出:
perl getopts.pl --letters a --words he she it
Letters: a, --words
Words:
--words
被视为--letters
参数本身的一部分。我希望GetOptions
在这种情况下抛出错误消息。如何完成这项工作。
答案 0 :(得分:6)
变化:
"letters=s{2}" => \@letters,
为:
"letters=s{1,2}" => \@letters,
...允许以1到2个字母作为参数。
答案 1 :(得分:2)
量词'{2}'
表示“正好两个”。所以,它甚至忽略了后来的第二个参数是一个开关。
您可能从以下文件中获取的GetOpt :: Long文本:
GetOptions( 'coordinates=f{2}' => \@coor, 'rgbcolor=i{3}' => \@color );
对和三元组的特定条件是否有意义。您需要 x 和 y 坐标,或者您想要RGB规范的每个部分的值。就像你期望的那样'cmykcolor={4}'
。
如果你想要至少一个,直到下一个开关,你可以指定'{1,}'
作为量词,如果你想要“最多两个”,那么'{1,2}'
是有道理的。有趣的是,'{,2}'
的行为与'{1,2}'
完全相同。似乎只要你指定一个量词,它就会再吸一个参数,无论下一个参数是否是一个开关。
因此Getopt::Long
中的量词可能看起来与正则表达式相同,但它们意味着不同的东西。