3

如果输入命令执行是这样的,我该如何使用Getopt::Long方法:

$ testcmd -option check  ARG1 ARG2 ARG3

或者

$ testcmd  ARG1 ARG2 ARG3
4

3 回答 3

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
用法:./cmd [--option=VALUE] ARG1 ARG2 ARG3

$ ./cmd 1 2 3
./cmd:选项=默认值:1 2 3

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

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

$ ./cmd -option 检查 abc
./cmd: 选项=检查: abc
于 2010-06-30T11:11:38.953 回答
4

您需要启用该pass_through选项。下面引用的文档:

pass_through(默认:禁用)

未知、不明确或提供无效选项值的选项在 @ARGV 中传递,而不是被标记为错误。这使得编写只处理部分用户提供的命令行参数并将剩余选项传递给其他程序的包装脚本成为可能。

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

DVK在另一个答案中发布了如何执行此操作的示例。如果您觉得它有用,我会首先支持他的回答。

于 2010-06-30T11:12:45.330 回答
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);
}
于 2013-11-03T02:52:36.193 回答