0

我必须GetOptions在哈希数组中使用。

我的要求是编写一个结合多个选项的 Perl 脚本,例如:

test.pl -a mango -s ripe -d <date value>

或者

 test.pl -a apple -s sour 

其中mango, ripe, apple,sour等是用户输入,也用于在查询的 SQLWHERE子句中绑定变量SELECT以生成报告。

我这个代码

use vars qw ($opt_a $opt_s $opt_d)
Getopts('a:s:d:')

现在我在写哈希时遇到了一个问题

my %hash = @ARGV 

上面的哈希定义是否正确?有没有更好的方法来使用哈希?

4

1 回答 1

6

不,这个哈希“定义”不正确。如果-amango -sripe给出命令行会发生什么?你会得到一个带有“-amango => -sripe”的哈希值。如果-amango -s ripe给定 @ARGV 的大小将是奇数,并会显示警告(如Odd number of elements in hash assignment at ./x.pl line 6.)。

您可以使用 getopts 直接创建哈希。尝试:

use strict;
use warnings;
use Getopt::Std;

my %opts;
getopts("a:s:d:", \%opts) or die;

while (my($k, $v) = each %opts) {
    print "$k => $v\n";
}

-amango -s ripe使用args调用输出:

a => mango
s => ripe
于 2013-04-09T21:55:49.180 回答