こんばんは!
URLを触る時は、URI(perlモジュール名)が超便利だと思う。
という話を書きましたが、実は他のモジュールをもう少し知っておくと、さらにハッピーになります。
おっと、それを説明する前に
my $uri = URI->new('http://perl-mongers.org');
print $uri->as_string . "\n";
print "$uri\n";
上記の出力はどちらも、「http://perl-mongers.org」となり、同じ結果です。
これを話しておかないと、めんどうに思う方がいたりすると、Dan the Perl Monger さんにコメントで教えてもらいました。
また、タイトルにURIと、あまり深く考えず書いてたのを、C_L さんに指摘してもらいました。
ありがとうございます。
URI::QueryParamを活用しよう!
query_form() メソッドは便利なのですが、困るときがあります。例をあげてみましょう。
use strict;
use warnings;
use URI;
use Data::Dumper;
my $uri = URI->new('http://perl-mongers.org');
$uri->query_form( { hoge => 'hoge', foo => [ 1 , 2 ] } ) ;
my %params = $uri->query_form;
warn Dumper \%params;
my @params = $uri->query_form;
warn Dumper \@params;
結果
$VAR1 = {
'foo' => '2',
'hoge' => 'hoge'
};
$VAR1 = [
'foo',
'1',
'foo',
'2',
'hoge',
'hoge'
];
そうですね。 query_form の戻り値は、配列なので、fooというパラメータを二つ渡した際に、場合によっては扱いにくくなってしまいます。下記のような、形式でデータを手に入れたいケースがありますよね?
$VAR1 = {
'foo' => [
'1',
'2'
],
'hoge' => 'hoge'
};
そこで、URI::QueryParamですね。このモジュールを use するといくつかのモジュールが使えるようになります。下記のコードを実行すると、上記の欲しい形で結果を手に入れることができます。
use strict;
use warnings;
use URI;
use URI::QueryParam;
use Data::Dumper;
my $uri = URI->new('http://perl-mongers.org');
$uri->query_form( { hoge => 'hoge', foo => [ 1 , 2 ] } ) ;
my $params = $uri->query_form_hash;
warn Dumper $params;
便利ですね!
URI::Escape
私達は、日本人または、日本語を扱う方々のはずなので、URI::Escapeは、必ずお世話になると思います。
具体的に何をするかというと、URLにマルチバイトや記号などのurlに使うことができない文字を、安全な文字に変換してくれます。
my $a = URI::Escape::uri_escape('日本語') ;
my $b = URI::Escape::uri_escape_utf8( Encode::decode( 'utf-8' , '日本語' ) ) ;
print "$a\n" ;
print "$b\n" ;
print URI::Escape::uri_unescape($a) ."\n";
print URI::Escape::uri_unescape($b) ."\n";
この結果は、以下のようになります。安全ですね!
%E6%97%A5%E6%9C%AC%E8%AA%9E %E6%97%A5%E6%9C%AC%E8%AA%9E 日本語 日本語
注意として、utf8のフラグが立っている文字列の場合、専用の関数を使う必要があります。
これで、さらにURLを触るのが楽しくなりますね!
:wq!



Leave a comment