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の代わりに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');

注: の値の 1 つをquery_paramスカラーに代入するには、次のように括弧を使用する必要があります。

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

コードに何も表示されないのは、URL にフィールドがparamなく、一連のqueryフィールドしかないためです。

URLはおおよそ次のようになります

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

URLにセミコロンがありません

于 2012-09-06T17:46:34.323 に答える
1

@ikegami の推奨に従って、廃止された URL::URI の代わりに 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 に答える