我有一个perl脚本,需要解析以下内容:
prog -t xyz -p“a b”-cm xyz.cmd -co xyz.config
但是当我输入
时我希望它出错prog -t xyz -p a b -cm xyz.cmd -co xyz.config
(因为-p后跟a和b没有引号)。我正在使用Getopt :: Long来处理cmd行args。如何捕捉上述情况并输出错误?
谢谢!
答案 0 :(得分:7)
您可以简单地检查一下是否留下了非选项。
use Getopt::Long qw( );
my ($opt_t, $opt_p, $opt_cm, $opt_co);
sub parse_args {
Getopt::Long::Configure(qw( posix_default ));
($opt_t, $opt_p, $opt_cm, $opt_co) = ();
Getopt::Long::GetOptions(
'h|help|?' => \&help,
't=s' => \$opt_t,
'p=s' => \$opt_p,
'cm=s' => \$opt_cm,
'co=s' => \$opt_co,
)
or usage();
@ARGV == 0
or usage("Too many arguments.");
}
{
parse_args();
...
}
输出(使用下面提供的usage
):
$ ./prog -t xyz -p a b -cm xyz.cmd -co xyz.config
Too many arguments.
Try `prog --help' for more information.
另外,有一些关于help
和usage
的实施的建议:
use File::Basename qw( basename );
sub help {
my $prog = basename($0);
print("$prog [options]\n");
print("$prog --help\n");
print("\n");
print("Options:\n");
...
exit(0);
}
sub usage {
my $prog = basename($0);
if (my ($msg) = @_) {
chomp($msg);
warn("$msg\n");
}
warn("Try `$prog --help' for more information.\n");
exit(1);
}