如何使用Getopt :: Long方法?

时间:2010-06-30 11:04:07

标签: perl getopt-long

如果输入命令执行如下,我该如何使用Getopt::Long方法:

$ testcmd -option check  ARG1 ARG2 ARG3

$ testcmd  ARG1 ARG2 ARG3

3 个答案:

答案 0 :(得分:4)

一个简单的例子:

#! /usr/bin/perl

use warnings;
use strict;

use Getopt::Long;

sub usage { "Usage: $0 [--option=VALUE] ARG1 ARG2 ARG3\n" }

my $option = "default";

GetOptions("option=s", \$option)
  or die usage;

die usage unless @ARGV == 3;

print "$0: option=$option: @ARGV\n";

Getopt::Long在接受的内容方面非常灵活:

$ ./cmd
Usage: ./cmd [--option=VALUE] ARG1 ARG2 ARG3

$ ./cmd 1 2 3
./cmd: option=default: 1 2 3

$ ./cmd --option=foo 4 5 6
./cmd: option=foo: 4 5 6

$ ./cmd -option=bar 7 8 9
./cmd: option=bar: 7 8 9

$ ./cmd -option check a b c
./cmd: option=check: a b c

答案 1 :(得分:4)

您需要启用pass_through选项。文件引用如下:

  

pass_through(默认值:已禁用)

     

未知,含糊不清或不明确的选项   提供了无效的选项值   在@ARGV中传递而不是   被标记为错误。这样做   可以编写包装脚本   仅处理用户提供的部分内容   命令行参数,并传递   其余的选项   程序

     

如果启用了require_order,则选项   处理将在第一次终止   无法识别的选项,或非选项,   以先到者为准。但是,如果   取而代之的是permute,结果   可能会变得混乱。

DVK's posted an example如何在另一个答案中执行此操作。如果你发现它有用,我会先回答他的答案。

答案 2 :(得分:1)

#!/usr/bin/perl

use Getopt::Long;

my $cla = GetOptions (  "one=s"         =>      \$one,
                        "two=s"         =>      \$two,
                        "three=s"       =>      \$three,
                        "help|h|?"      =>      \$help,
) or usage ();

if ($help) {
        usage ();
}

my $first = $one;
my $second = $two;
my $third = $three;

printf ("%-7s %-9s %-7s\n", $first, $second, $third);

sub usage {
        print "\n$0\t" . "[ -one <text> -two <text> -three <text> ]\n\n";
        exit (0);
}