2012-09-06 2 views
1
# The url I'm on: https://development.cherrylanekeepsakes.com/cgi-bin/employees.cgi?action=edit_timeclock_dashboard&id=80&start_date=2012-09-01&end_date=2012-09-16&print_view=1 
use URI::URL; 
use Data::Dumper; 
my $url = URI::URL->new('' . $cgi->new->url(-path_info => 1, -query => 1)); 
warn Dumper($url->params('print_view')); 

아무 것도 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 이것은 꽤 간단한 작업처럼 보입니다.URI :: URL 매개 변수를 가져 오지 못함

답변

3

URI 대신 URI::URL을 사용하는 이유가 있습니까? 이전 버전과의 호환성을 위해서만 존재하는 오래된 모듈입니다. 문서화되지 않았기 때문에 params이 당신이 생각하는대로 행동한다고 ​​가정 할 수는 없습니다.

다음은 URI :: URL을 대체 한 모듈을 사용하는 솔루션입니다. 심지어 같은 배포판의 일부입니다.

use URI qw(); 
my $url = URI->new('https://...'); 
my %query_form = $url->query_form(); 
say $query_form{print_view}; 

또는 더 나은 아직,

use URI    qw(); 
use URI::QueryParam qw(); 
my $url = URI->new('https://...'); 
say $url->query_param('print_view'); 

참고 :

my ($print_view) = $url->query_param('print_view'); 
+0

예, 감사 URL에 없다! – thealexbaron

0

을 @ 당으로서 : 스칼라에 query_param의 값 중 하나를 할당하려면를 다음과 같이 괄호를 사용할 필요가 ikegami 님의 추천으로, 이제는 구식 URL :: URI 대신 URI를 사용하고 있습니다. query 필드의 세트 -

# https://development.cherrylanekeepsakes.com/cgi-bin/employees.cgi?action=edit_timeclock_dashboard&id=80&start_date=2012-09-01&end_date=2012-09-16&print_view=1 
use URI; 
use URI::QueryParam; 

my $url = URI->new('' . $cgi->new->url(-path_info => 1, -query => 1)); 

warn $url->query_param('print_view'); # prints 1 as expected 
1

코드가 아무것도 표시되지 않습니다 그 이유는 당신의 URL이 더 param 필드가 없다는 것입니다.

URL은 대략 같은

scheme://host:port/path1/path2;param1;param2?query1=A&query2=B#fragment 

을보고 더 세미콜론

관련 문제