# 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'));
我什么也没有。我究竟做错了什么?这似乎是一项非常简单的任务。
答案 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