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

无法使用Perl CGI设置参数->;param(),perl,web,cgi,Perl,Web,Cgi,我试图通过param函数设置一个要传递到下一页的参数 我试过了 param(-name=>'foo',-value=>'the value'); param(-name=>'fooz',-values=>['an','array','of','values']); param('foo3', 1); 我的脚本重定向到另一个脚本,该脚本检查所有(param),但没有运气。CGI主页暗示这应该“正常工作”。我做错了什么 谢谢 有几种方法可以做到这一点 在这些方法的帮助下构建

我试图通过param函数设置一个要传递到下一页的参数

我试过了

param(-name=>'foo',-value=>'the value');
param(-name=>'fooz',-values=>['an','array','of','values']);
param('foo3', 1);
我的脚本重定向到另一个脚本,该脚本检查所有(param),但没有运气。CGI主页暗示这应该“正常工作”。我做错了什么


谢谢

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

  • 在这些方法的帮助下构建重定向URI

  • 然后从重定向页面加载该文件的状态

    my $query = CGI->new;
    $query->save(\*FILEHANDLE);
    my $q = CGI->new(\*INFILEHANDLE);
    
  • 通过JavaScript执行重定向,尽管这不允许更改参数

    my $q = CGI->new;
    print $q->header();
    print "window.location=\"$url\";\n\n"
    

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

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

  • 在这些方法的帮助下构建重定向URI

  • 然后从重定向页面加载该文件的状态

    my $query = CGI->new;
    $query->save(\*FILEHANDLE);
    my $q = CGI->new(\*INFILEHANDLE);
    
  • 通过JavaScript执行重定向,尽管这不允许更改参数

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

    您需要使用

    $cgi->param(-name=>'foo',-value=>'the value');
    $cgi->param(-name=>'fooz',-values=>['an','array','of','values']);
    $cgi->param('foo3',1);
    printf'',$cgi->self\u url;
    
    这就是f.ex<代码>

    您需要使用

    $cgi->param(-name=>'foo',-value=>'the value');
    $cgi->param(-name=>'fooz',-values=>['an','array','of','values']);
    $cgi->param('foo3',1);
    printf'',$cgi->self\u url;
    


    这就是f.ex

    如果有错误,请描述您遇到的错误。@MichaelSlade后续页面没有收到这些参数+1:我不知道Perl支持的否定裸字,如
    -name
    @AdrianPronk。没有,在=>之前出现的任何内容都是隐式的quoted@JD:那不完全是真的。在我的Perl(5.10)
    $x=-name
    $x
    设置为字符串
    '-name'
    ,但
    %x=(+name=>1)
    创建一个值为
    'name'
    的键,而不是
    '+name'
    。请描述您遇到的错误,如果有的话。@MichaelSlade后续页面无论如何都不会收到这些参数+1:我不知道Perl支持的否定裸字,比如
    -name
    @AdrianPronk它不知道,在=>之前出现的任何内容都是隐式的quoted@JD:那不完全是真的。在我的Perl(5.10)
    $x=-name
    $x
    设置为字符串
    '-name'
    ,但是
    %x=(+name=>1)
    创建一个值为
    'name'
    的键,而不是
    '+name'
    。我认为无论是否使用对象,都可以传递参数。我正在使用我的$query=CGI->new$查询->参数(-name=>'foo',-value=>'thevalue');打印$query->redirect(-URL=>'cookietest.cgi');没有结果。cookietest.cgi已读取带和不带相同空值的对象的参数results@JD听起来像是在尝试为不同的请求设置参数(通过重定向)。在对象上设置参数将覆盖当前请求上的参数,但它不会通过重定向帮助您处理新请求。请尝试打印$query->redirect(-URL=>'cookietest.cgi?foo=bar')将参数传递给新请求。@JD我用参数重定向的步骤更新了我的示例。其中一个选择就是奥尔德斯所说的。布兰特的回答,连同奥尔德斯的评论,都是恰到好处的。如果需要将键/值对传递到重定向到的下一页,则需要实际传递它们。唉,CGI没有内置的会话支持,就像Java Servlet之类的东西一样,实际上您必须自己完成这项工作。布兰特的第二个选择基本上就是这样做,但我同意他的观点,你应该满足于他的第一个选择。这些都是很好的建议。我想知道是否有一种方法可以模仿参数传递的表单动作提交方式。你能在Perl CGI中做到这一点吗?我认为不管对象是否被使用,都可以传递参数。我正在使用我的$query=CGI->new$查询->参数(-name=>'foo',-value=>'thevalue');打印$query->redirect(-URL=>'cookietest.cgi');没有结果。cookietest.cgi已读取带和不带相同空值的对象的参数results@JD听起来像是在尝试为不同的请求设置参数(通过重定向)。在对象上设置参数将覆盖当前请求上的参数,但它不会通过重定向帮助您处理新请求。请尝试打印$query->redirect(-URL=>'cookietest.cgi?foo=bar')将参数传递给新请求。@JD我用参数重定向的步骤更新了我的示例。其中一个选择就是奥尔德斯所说的。布兰特的回答,连同奥尔德斯的评论,都是恰到好处的。如果需要将键/值对传递到重定向到的下一页,则需要实际传递它们。唉,CGI没有内置的会话支持,就像Java Servlet之类的东西一样,实际上您必须自己完成这项工作。布兰特的第二个选择基本上就是这样做,但我同意他的观点,你应该满足于他的第一个选择。这些都是很好的建议。我想知道是否有一种方法可以模仿参数传递的表单动作提交方式。您可以在Perl CGI中实现这一点吗?