Perl 如何在哈希数组中使用GetOptions?
我曾经在散列数组中使用“GetOptions” 我在下面有一个散列数据结构Perl 如何在哈希数组中使用GetOptions?,perl,Perl,我曾经在散列数组中使用“GetOptions” 我在下面有一个散列数据结构 %fruit=( banana => [ 1, "yellow" ], cherry => [ 2, "dark red" ], strawberry => [ 3, "red" ], ); 关键是水果的名字 然后我想用“GetOptions”来表示水果的“name”、“number”和“color” 请告诉我如何使用GetOptions 我想用like-n来搜索name,用-
%fruit=(
banana => [ 1, "yellow" ],
cherry => [ 2, "dark red" ],
strawberry => [ 3, "red" ],
);
关键是水果的名字
然后我想用“GetOptions”来表示水果的“name”、“number”和“color”
请告诉我如何使用GetOptions
我想用like-n来搜索name,用-I来搜索number,用-c来搜索color
请让我知道…:(我认为您不太了解
GetOptions
的功能
它解析您传入的选项
以你为例:
> myprog.pl --name banana
在您的计划中,您将:
my $name;
GetOptions("name=s" => \$name);
然后,您的$name
将包含香蕉
然后,您需要从该变量获取名称,从
%fruit
哈希中提取匹配条目,并输出结果。%fruit
是哈希,但哈希中的值是对两个成员数组的引用
GetOptions所做的是获取一个数组(如%ARGV)
并从该数组中解析选项。您可以将这些选项放入标量、数组甚至散列中,但没有直接的方法说命令行选项是对数组的引用
您最好创建一个数组,该数组将包含以下值:
$ myprogram --fruit banana=yellow --fruit cherry="dark red" --fruit strawberry=red
然后你可以有:
GetOptions('fruit=s' => \@fruitHash);
阵列将如下所示:
$fruit[0] = 'banana=yellow';
$fruit[1] = 'cherry=dark red';
$fruit[2] = 'strawberry=red';
test.pl -i 3
从那里,您可以遍历数组并创建哈希引用:
my %fruitHash;
my $count = 1;
foreach my $value (@fruit) {
my ($fruit, $color) = split(/=/, $value);
$fruit{$fruit}=>[0] = $count,
$fruit{$fruit)=>[1] = $color,
}
无法让GetOptions理解命令行选项是对两个成员数组的引用
我正在尝试使用getoptions进行名称、数字和颜色搜索。例如,在命令行中键入名称类似于“banana”的“-n”,然后searchinng banana=>[1,“黄色”] 这不是你的问题。这很简单:
use GetOpt::Long;
my ($number, $name, $color);
my $results = GetOptions (
"number=i" => \$number,
"name=s" => \$name,
"color=s" => \$color,
);
然后,检查$number、$name和$color的值(如果GetOptions返回false
值,还应检查$results并给出一条漂亮的错误消息)
你没有接受答案,所以这个可能合适 因为您没有提供如何调用脚本的示例,所以我假设如下:
$fruit[0] = 'banana=yellow';
$fruit[1] = 'cherry=dark red';
$fruit[2] = 'strawberry=red';
test.pl -i 3
给我们
strawberry, 3, red
cherry, 2, dark red
及
给我们
strawberry, 3, red
cherry, 2, dark red
及
给我们
banana, 1, yellow
如果这不是您所需要的,请告诉我们更多!
GetOptions
用于处理命令行选项。您到底想做什么?我正在尝试使用GetOptions进行名称、数字和颜色搜索。例如,在命令行中键入“-n”和类似“banana”的名称,然后搜索ng banana=>[1,“黄色”]…@user712390:这不是你在问的问题。如果你想能够解析“-n1”或“-cred”作为命令行输入,您以一种非常简单的方式使用GetOptions。请参阅。用您想要完成的内容重申您的问题。示例命令行和输出将使问题变得更加清晰,而不是我的迷你rant,但为什么从事编程的人不知道指定示例输入和所需的输出状态?1)命令行是什么样子的,2)您想对输入做什么?
#!/usr/local/bin/perl -w
use strict;
use warnings;
use Getopt::Std;
use vars qw (%opt);
getopts( "i:n:c:", \%opt ) or usage();
use Data::Dumper;
my %fruit=(
banana => [ 1, "yellow" ],
cherry => [ 2, "dark red" ],
strawberry => [ 3, "red" ],
);
if ($opt{n}) {
print "Fruit: $opt{n}, $fruit{$opt{n}}[0], $fruit{$opt{n}}[1] \n";
} elsif ($opt{i}) {
while( my ($key, $value) = each %fruit) {
if ($opt{i} == $value->[0] ) {
print "Fruit: $key, $value->[0], $value->[1] \n";
last;
}
}
} elsif ($opt{c}) {
while( my ($key, $value) = each %fruit) {
if ($opt{c} eq $value->[1] ) {
print "Fruit: $key, $value->[0], $value->[1] \n";
last;
}
}
}