1

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

我试过了

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

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

谢谢!

4

2 回答 2

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. 将参数的状态保存到文件中,然后从重定向页面加载该文件的状态。

    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"
    

在我看来,我上面列出的第一个选项是最容易做到的。

于 2012-04-12T17:28:16.567 回答
1

你需要使用self_url方法

$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>.

于 2012-04-12T20:55:03.167 回答