URI :: URL未获取参数

时间:2012-09-06 16:43:20

标签: perl url module

# 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'));

我什么也没有。我究竟做错了什么?这似乎是一项非常简单的任务。

3 个答案:

答案 0 :(得分:3)

您是否有理由使用URI::URL代替URI?它是一个过时的模块,仅用于向后兼容。它甚至没有记录,因此我甚至无法确认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');

注意:要将query_param的值之一指定给标量,您需要按如下方式使用parens:

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

答案 1 :(得分:1)

您的代码未显示任何内容的原因是您的网址没有param个字段 - 只有一组query字段。

网址大致类似于

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

并且您的网址中没有分号

答案 2 :(得分:0)

根据@ ikegami的建议,我现在使用的是URI,而不是过时的URL :: URI。

# 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