2

Getopt::Longを使用して、Perl でコマンド ライン オプションを解析しています。短いコマンド ( )にはプレフィックス-(1 つのダッシュ)を使用し、長いコマンド (例: ) には (2つのダッシュ) を使用する必要があります。-s----input=file

私の問題は、特別なオプション ( -r=<pattern>) が 1 つあるため、引数の要件に対して長いオプションですが、他の長いオプションのように-二重ダッシュ ( ) ではなく 1 つのダッシュ ( ) 接頭辞を付ける必要があることです。これらを受け入れるようにGetopt::Long--をセットアップすることは可能ですか?

4

3 に答える 3

6

デフォルトでは、Getopt::Longは一重ダッシュ (-) または二重ダッシュ (--) のいずれかを交換可能に受け入れます。したがって、そのまま使用できます--r=foo。それを試してみると、エラーが発生しますか?

use strict;
use warnings;
use Getopt::Long;
my $input = 2;
my $s = 0;
my $r = 3;
GetOptions(
    'input=s' => \$input,
    's'       => \$s,
    'r=s'     => \$r,
);
print "input=$input\n";
print "s=$s\n";
print "r=$r\n";

これらのサンプル コマンド ラインは、同じ結果を生成します。

my_program.pl --r=5
my_program.pl --r 5
my_program.pl  -r=5
my_program.pl  -r 5

input=2
s=0
r=5
于 2010-03-16T15:37:15.787 に答える
3

「バンドル」をオンに設定していますか?

myprog -abcその場合は、バンドルを無効にすることができます (ただし、代わりに使用するなどのことはできませんmyprog -a -b -c)。

それ以外の場合、今思いつく唯一のことは、Argument Callback ( <>) を使用して、そのオプションを手動で解析することです。

于 2010-03-16T15:37:03.100 に答える
0
#!/usr/bin/perl

use strict; use warnings;

use Getopt::Long;

my $pattern;

GetOptions('r=s' => \$pattern);

print $pattern, "\n";

出力:

C:\Temp> zz -r=/test/
/テスト/
C:\Temp> zz -r /test/
/テスト/

何か不足していますか?

于 2010-03-16T15:39:43.047 に答える