如何将嵌套的哈希参数传递给CGI脚本的URL? 数据:
my $params = {
pwd => 'abc',
usr => 'abb',
data => { xyz => 'xxx' },
};
我试过了:
<URI>?pwd=abc&usr=abb&data[xyz]='xxx'
但结果如下:
$VAR1 = {
'data[yxz]' => 'xxx',
'pwd' => 'abc',
'usr' => 'abb'
}
感谢任何提示。
注意:好的,我可以解析字符串&#39;数据[yxz]&#39;并将整个对转换为hashref,但我想知道是否有任何&#39; native&#39;这个功能。
答案 0 :(得分:2)
否。
没有原生方式来做到这一点。如果您使用的是CGI.pm,那么您可以传递多个具有相同名称的参数,并将它们全部提取到数组中。
GET /?foo=1&foo=2&foo=3
use strict;
use warnings;
use CGI;
use Data::Dumper;
my $q = CGI->new;
my @foo = $q->multi_param('foo');
print Dumper \@foo;
通过使多个输入字段具有相同的name
属性,您将从HTML表单中实现此类行为。但这并没有给你一个哈希值。
要传递实际的数据结构,但这还不够。 您可以将多维参数编码为JSON。
<URI>?pwd=abc&usr=abb&data={'yxz':'xxx'}
正确地进行URL编码,如下所示。
?pwd=abc&usr=abb&data=%7B%27yxz%27%3A%27xxx%27%7D
在您的应用程序中,您可以使用JSON模块将其从JSON转换为Perl数据结构。
答案 1 :(得分:0)
查询字符串只是一个字符串。您可以按照自己喜欢的方式对数据进行编码,并使用您喜欢的任何解析器将其转换为数据结构。
大多数解析器会为您提供键/值对的散列,并将具有相同名称的任何一个扩散到数组中。这是Perl(和大多数编程语言)几乎永远处理它的常见方式。
如果您想要PHP使用的扩展数据结构格式,那么您将需要使用旨在处理该格式的解析器。
像往常一样CPAN to the rescue。
use PHP::ParseStr qw(php_parse_str);
my $data = php_parse_str($ENV{QUERY_STRING});