" N"使用cgi的参数数量

时间:2014-11-18 17:05:01

标签: perl cgi

如何使用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,.....

请帮我解决这个问题。感谢。

3 个答案:

答案 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;