3

入力コマンドの実行が次のような場合、Getopt::Longメソッドを使用するにはどうすればよいですか。

$ testcmd -option check  ARG1 ARG2 ARG3

また

$ testcmd  ARG1 ARG2 ARG3
4

3 に答える 3

4

オプションを有効にする必要がありpass_throughます。以下に引用するドキュメント:

pass_through(デフォルト: 無効)

不明なオプション、あいまいなオプション、または無効なオプション値が指定されたオプションは、エラーとしてフラグが立てられる代わりに @ARGV で渡されます。これにより、ユーザーが指定したコマンド ライン引数の一部のみを処理するラッパー スクリプトを記述し、残りのオプションを他のプログラムに渡すことができます。

が有効な場合require_order、オプションの処理は、最初に認識されないオプションまたは非オプションのいずれか早い方で終了します。ただし、 permute代わりに を有効にすると、結果が混乱する可能性があります。

DVKは、別の回答でこれを行う方法の例を投稿しました。あなたがそれが役に立つと思うなら、私は最初に彼の答えを支持します。

于 2010-06-30T11:12:45.330 に答える
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 check abc
./cmd: オプション=チェック: abc
于 2010-06-30T11:11:38.953 に答える
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 に答える