无法使用Perl CGI-> param()设置参数

时间:2012-04-12 17:23:23

标签: perl web cgi

我正在尝试通过param函数设置一个参数传递给下一页。

我试过

param(-name=>'foo',-value=>'the value');
param(-name=>'fooz',-values=>['an','array','of','values']);
param('foo3', 1);

我的脚本重定向到另一个检查所有(参数),但没有运气。 CGI手册页暗示这应该“正常工作”。我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:4)

有几种方法可以做到这一点。

  1. 借助URI::QueryParam方法构建重定向URI。

    use URI qw();
    use URI::QueryParam qw();
    
    my $q = CGI->new;
    my $u = URI->new($q->url);
    $u->query_param(foo => 'the value');
    $u->query_param_append(fooz => qw(an array of values));
    $u->query_param(foo3 => 1);
    $u->as_string   # expression returns serialised string
    
  2. Save the state文件的参数,然后从重定向的页面加载该文件的状态。

    my $query = CGI->new;
    $query->save(\*FILEHANDLE);
    my $q = CGI->new(\*INFILEHANDLE);
    
  3. 通过JavaScript进行重定向,但这不会让您更改参数。

    my $q = CGI->new;
    print $q->header();
    print "window.location=\"$url\";\n\n"
    
  4. 在我看来,我上面列出的第一个选项是最容易做到的。

答案 1 :(得分:1)

您需要使用self_url method

$cgi->param(-name=>'foo',-value=>'the value');
$cgi->param(-name=>'fooz',-values=>['an','array','of','values']);
$cgi->param('foo3', 1);
printf '<a href="%s">next page</a>', $cgi->self_url;

这变成f.ex. <a href="http://localhost:5000/foo.pl?foo=the%20value;fooz=an;fooz=array;fooz=of;fooz=values;foo3=1">next page</a>