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

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

4

3 回答 3

4

您使用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标量,您需要使用括号,如下所示:

my ($print_view) = $url->query_param('print_view');
于 2012-09-06T17:19:06.843 回答
1

根据@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
于 2012-09-06T17:25:58.587 回答
1

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

URL 大致如下

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

并且您的网址中没有分号

于 2012-09-06T17:46:34.323 回答