元のパラメータ順を気にしないなら query_form
を使うとクエリパラメータをハッシュとして操作できるので簡単。
use strict;
use warnings;
use Data::Dumper;
use URI;
my $uri = URI->new('http://example.com/foo/bar/baz?qux=123&hoge=123&fuga=999');
print $uri->as_string, "\n";
#=> http://example.com/foo/bar/baz?qux=123&hoge=123&fuga=999
# クエリパラメータを削除して再設定
my %query_hash = $uri->query_form;
delete($query_hash{hoge});
$uri->query_form(%query_hash);
# 削除されているが、Hash を経由するためパラメータの順序は保持されていない
print $uri->as_string, "\n";
#=> http://example.com/foo/bar/baz?fuga=999&qux=123
元のパラメータ順を保持したまま不要なパラメータのみ削除したい場合、URI::QueryParam
によって提供される query_param_delete
が使える。
use strict;
use warnings;
use Data::Dumper;
use URI;
use URI::QueryParam;
my $uri_base = URI->new('http://example.com/foo/bar/baz?qux=123&hoge=123&fuga=999&abc=DEF');
print $uri_base->as_string, "\n";
#=> http://example.com/foo/bar/baz?qux=123&hoge=123&fuga=999&abc=DEF
my $uri1 = $uri_base->clone;
$uri1->query_param_delete('qux');
print $uri1->as_string, "\n";
#=> http://example.com/foo/bar/baz?hoge=123&fuga=999&abc=DEF
my $uri2 = $uri_base->clone;
$uri2->query_param_delete('fuga');
print $uri2->as_string, "\n";
#=> http://example.com/foo/bar/baz?qux=123&hoge=123&abc=DEF
my $uri3 = $uri_base->clone;
$uri3->query_param_delete('hoge');
$uri3->query_param_delete('fuga');
print $uri3->as_string, "\n";
#=> http://example.com/foo/bar/baz?qux=123&abc=DEF
my $uri4 = $uri_base->clone;
$uri4->query_param_delete('abc');
print $uri4->as_string, "\n";
#=> http://example.com/foo/bar/baz?qux=123&hoge=123&fuga=999
my $uri5 = $uri_base->clone;
$uri5->query_param_delete('qux');
$uri5->query_param_delete('hoge');
$uri5->query_param_delete('fuga');
$uri5->query_param_delete('abc');
print $uri5->as_string, "\n";
#=> http://example.com/foo/bar/baz
# 存在しないパラメータ名を指定しても無視されるだけ
my $uri6 = $uri_base->clone;
$uri6->query_param_delete('AAA');
$uri6->query_param_delete('BBB');
print $uri6->as_string, "\n";
#=> http://example.com/foo/bar/baz?qux=123&hoge=123&fuga=999&abc=DEF
参考
URI::QueryParam - URI のための追加のクエリメソッド - perldoc.jp
http://perldoc.jp/docs/modules/URI-1.35/URI/QueryParam.pod