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";

您正在使用的功能被标记为实验性

警告:以下是实验性功能。

但考虑到您指定了三个值,也许这仍然应该被视为一个错误。

同时,简单的解决方法是检查是否添加了值,如果不使用默认值。

#!/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 回答