1

Perl (v5.14.2) を使用して、単一のコマンド ライン入力引数として 3D ベクトルを取得しようとしています。

Getopt::Longのドキュメントを読んだ後、次のことから始めることにしました。

use Getopt::Long;
my @boxSize = (0, 0, 0);

GetOptions('box:f{3}' => \@boxSize);

print "Box size: $boxSize[0], $boxSize[1], $boxSize[2]\n";

引数を指定してこのスクリプトを実行すると、次の-box 1.0 2.0 3.0結果が得られます。

Box size: 0 0 0

@boxSizeここで、初期化しないままにしておくと、次のようになります。

use Getopt::Long;
my @boxSize; #= (0, 0, 0);

GetOptions('box:f{3}' => \@boxSize);

print "Box size: $boxSize[0], $boxSize[1], $boxSize[2]\n";

同じスクリプトが次を返すようになりました。

Box size: 1.0 2.0 3.0

誰が私が間違っているのか教えてもらえますか?

4

1 に答える 1

3

バグを見つけたと言っていたので、何かをチェックしました。このように使用すると、値が追加されることがわかりました。で6つの値になり@boxSizeます。

#!/usr/bin/env perl

use strict;
use warnings;

use Getopt::Long;
my @boxSize = (0, 0, 0);

GetOptions('box:f{3}' => \@boxSize);

print "Box size: @boxSize\n";

使用している機能は実験的なものとしてマークされています

警告:以下は実験的な機能です。

ただし、3つの値を指定することを考えると、これはバグと見なす必要があります。

それまでの間、簡単な回避策は、値が追加されたかどうかを確認し、追加されていない場合はデフォルトを使用することです。

#!/usr/bin/env perl

use strict;
use warnings;

use Getopt::Long;
my @boxSize;

GetOptions('box:f{3}' => \@boxSize);
@boxSize = (0, 0, 0) unless @boxSize;

print "Box size: @boxSize\n";
于 2013-02-26T23:05:00.093 に答える