LoginSignup
0
0

More than 5 years have passed since last update.

Perl で URL から任意のパラメータを削除する

Posted at

元のパラメータ順を気にしないなら 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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0