如何使用cgi检索“N”个参数?
目前我正在使用以下代码。但我不知道参数名称。那个案子怎么做?
代码: script.cgi
use strict;
use CGI;
my $query = new CGI;
my $paramValue1 = $query->param('name1');
my $paramValue2 = $query->param('name2');
.....
输入网址:
http://host/cgi-bin/script.cgi?name1=value1&name2=value2&.........
输出值:
value1,value2,.....
请帮我解决这个问题。感谢。
答案 0 :(得分:7)
获取所有表单名称,
my @names = $query->param;
手工填充哈希,
my %param;
$param{$_} = $query->param($_) for $query->param;
更新
my @values = map $query->param($_), $query->param;
答案 1 :(得分:3)
以下是一种不好的做法:
my $name1 = $query->param('name1');
my $name2 = $query->param('name2');
使用数组!
my @names;
push @names, $query->param('name1');
push @names, $query->param('name2');
关于你的问题:如何避免对所有索引进行硬编码,这一点尤其重要,因为名称的数量是可变的。
没有参数的 $query->param
返回提供的参数列表,因此它成为过滤和排序的问题。您需要以下内容:
my @names =
map { $query->param('name'.$_) }
sort { $a <=> $b }
map { /^name(\d+)\z/ ? $1 : () }
$query->param;
如果网址是
,那会更有意义http://host/cgi-bin/script.cgi?name=value1&name=value2&...
因为如果你有这个URL,你可以简单地使用
my @names = $query->param('name');
答案 2 :(得分:0)
如果要将参数加载到散列中,最短/最干净的方法可以使用Vars()方法。
my $query = CGI->new;
my %param = $query->Vars;