2017-10-18 85 views
0

我想找出如何做到这相反:打开查询字符串成散列Perl的

Perl - How can I turn a hash into a query string?

我有一个字符串化的查询字符串的形式,并希望将其转换为一个哈希值。

随着更多的上下文,客户端传递一些URL参数作为字符串化的查询形式,这是base64编码,我想解码,变成一个哈希,添加一些更多的自定义URL参数的哈希,然后我有一个方法已经转换回字符串并附加到URL。

my $uriQuery = URI::Query->new($redirectQueryParams); 
$qs = $uriQuery->hash; 

似乎炸毁带

无法找到对象方法的 “新” 通过包 “URI ::查询”

+2

你有什么到目前为止已经试过? –

+0

你试过了什么?你有什么问题?告诉我们你的代码。如果您没有任何代码,那么堆栈溢出可能不是您问题的最佳位置。 –

+0

这可以通过快速搜索CPAN轻松解决。并且请至少包含您的查询字符串,以便我们知道您在说什么。 – simbabque

回答

2

URI模块结合滴在插件URI::QueryParams可以做你想做的。

use strict; 
use warnings; 

use URI; 
use URI::QueryParam; 

my $uri = URI->new('https://example.org/?foo=bar&baz=qrr'); 
$uri->query_param_append(frobnication => 'yes, please'); 

print $uri; 

这将打印

https://example.org/?foo=bar&baz=qrr&frobnication=yes%2C+please 

如果你其实想一个哈希,你可以调用the query_form_hash method

$uri->query_form_hash 

但是,考虑到您所能想到的所有更改都已经实施,这没有多大意义。

+0

我很欣赏答案,但这与我所需要的相反。我只想将查询字符串转换为散列,向散列中添加更多项目然后使用 - https://stackoverflow.com/questions/30281332/perl-how-can-i-turn-a-hash-into -a-query-string将其转换回查询。 所以输入应该是: 富=栏&巴兹= QRR 和输出: $数据= { '富'=> '酒吧', '巴兹'=> 'QRR', }; 我可以再添加: $ data - > {more} ='yes'; 转换回查询使用: $ url-> query_form(%$ data); – snakespan

+1

@snakespan我明白这一点。但我说你不需要。这个模块已经为你做了所有的工作。如果您真的需要,请参阅我的编辑,了解如何自己完成工作。 – simbabque