use Data::Dumper; use Text::ParseWords; $ENV{QUERY_STRING} = 'DATABASE=inventory+SF=name\&title+param3="3+4"'; my %params = map { split /=/, $_, 2 } parse_line('\+', 0, $ENV{QUERY_STRING}); print Dumper(\%params);