我强烈建议使用Getopt::Long来解析命令行参数。这是一个标准模块,它工作得非常棒,并且让你想要做的事情变得轻而易举。
use strict;
use warnings;
use Getopt::Long;
my $first_option = undef;
my $second_option = undef;
GetOptions ('first-option=s' => \$first_option,
'second-option=s' => \$second_option);
die "Didn't pass in first-option, must be xxxyyyzzz."
if ! defined $first_option;
die "Didn't pass in second-option, must be aaabbbccc."
if ! defined $second_option;
foreach my $arg (@ARGV) {
...
}
这让您有一个长选项名称,并自动为您将信息填充到变量中,并允许您对其进行测试。它甚至可以让您稍后添加额外的命令,而无需对参数进行任何额外的解析,例如添加“版本”或“帮助”选项:
# adding these to the above example...
my $VERSION = '1.000';
sub print_help { ... }
# ...and replacing the previous GetOptions with this...
GetOptions ('first-option=s' => \$first_option,
'second-option=s' => \$second_option)
'version' => sub { print "Running version $VERSION"; exit 1 },
'help' => sub { print_help(); exit 2 } );
-
然后,您可以使用, --
、第一个字母或整个选项在命令行中调用它,并GetOptions
为您计算出来。它使你的程序更健壮,更容易理解;你可以说它更“可猜测”。最好的部分是您永远不必更改处理的代码@ARGV
,因为GetOptions
它将为您处理所有设置。