2012-09-14 39 views

回答

8

創建一個URI對象並使用query_form方法獲取查詢的鍵/值對。如果你知道這些代碼參數只能指定一次,你可以做這樣的:

my $uri = URI->new("http://www.someaddress.com/index.html?test=value&code=INT_12345"); 
my %query = $uri->query_form; 

print $query{code}; 

或者您可以使用URI :: QueryParam偉馳加SOEM aditional的方法,URI對象:

my $uri = URI->new("http://www.someaddress.com/index.html?test=value&code=INT_12345"); 
print $uri->query_param("code"); 
4
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; 

我們可以看到:

$VAR1 = { 
       'test' => 'SECOND', 
       'code' => 'INT_12345' 
      }; 

不幸的是,這個結果是錯誤的。

有可能的解決方案:

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; 
}