Dan*_*umb 1 html perl serialization
我有一个使用CGI的perl脚本.
浏览器使用一些参数调用它.
我想获取这些参数,修改其中一些参数,然后发回一个重定向,其中包含一个代表修改参数的新查询字符串.
我知道我可以这样做,像这样:
my $cgi = CGI->new()
my %vars = $cgi->Vars
$vars{'modify_me'} .=' more stuff';
my $serialized = join '&', map {$_.'='.$cgi->escapeHTML($vars{$_})} keys %vars;
Run Code Online (Sandbox Code Playgroud)
然而,这只是感觉它可能会遗漏一些东西.此外,它没有做任何事情来处理多值参数.谁知道它没有做什么.
那么,是否有一个模块可以处理这个问题?我没有兴趣重新发明一个更有才华的怀疑的车轮.对?
该URI模块是你的朋友.它有一个query_form
方法,它接受参数的hash,hashref或arrayref并从中生成一个查询字符串.
它将URL为您编码数据(并注意您确实希望它编码URL编码而不是 HTML编码).
所以你可能有类似的东西:
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use URI;
my $q = CGI->new;
my @data = map {
my $name = $_;
my @values = $q->param($name);
my $value;
if (scalar @values == 1) {
($value) = @values;
} else {
$value = \@values;
}
if ($name eq "foo") {
$value = "replaced";
}
($name, $value);
} $q->param;
my $uri = URI->new('http://example.com/myAlternative.cgi');
$uri->query_form(\@data);
print $q->redirect(
-uri=> $uri,
-status => 301
);
Run Code Online (Sandbox Code Playgroud)