use URI; my $uri = URI->new("http://someaddr.com/index.html?test=FIRST&test=SECOND&code=INT_12345"); my %query = $uri->query_form; use Data::Dumper; print Dumper \%query;
We can see:
$VAR1 = { 'test' => 'SECOND', 'code' => 'INT_12345' };
Unfortunately, this result is incorrect.
Possible Solution:
use URI::Escape; sub parse_query { my ( $query, $params ) = @_; $params ||= {}; foreach $var ( split( /&/, $query ) ){ my ( $k, $v ) = split( /=/, $var ); $k = uri_unescape $k; $v = uri_unescape $v; if( exists $params->{$k} ) { if( 'ARRAY' eq ref $params->{$k} ) { push @{ $params->{$k} }, $v; } else { $params->{$k} = [ $params->{$k}, $v ]; } } else { $params->{$k} = $v; } } return $params; }
oklas source share