2009-01-06

$USE_PARAM_SEMICOLONS か -oldstyle_urls が必要だったけ?

おはようございます。なかじまです。

Perl の CGI モジュールで、QUERY_STRING を含むページの URL を扱う必要があり、次のとおり、CGI::url を使ってみると、パラメータの区切りがセミコロンになってしまうのです。あれ?そうだったけ?

my $cgi = CGI->new();
my $page = $cgi->url( -absolute => 1, -query => 1 );
# $page => /foobar.cgi?foo1=bar1;foo2=bar2;foo3=bar3

ざっと CGI.pm のソースコードを覗いてみたところ、バージョン 2.64 からセミコロンになったようです。ということは、私が CGI::url を使ったのは、ずっと前だったのかもしれません。Perl 5.004 とかそれ以前かもしれません。

アンパサンドに変更する方法は、2とおりありました。

1つ目は $USE_PARAM_SEMICOLONS を 0 とする方法です。

use CGI;
$CGI::USE_PARAM_SEMICOLONS = 0;

2つ目は -oldstyle_urls を指定する方法です。

use CGI qw(-oldstyle_urls);

とすると、次のとおり、アンパサンドで区切られた期待どおりの結果となりました。

my $cgi = CGI->new();
my $page = $cgi->url( -absolute => 1, -query => 1 );
# $page => /foobar.cgi?foo1=bar1&foo2=bar2&foo3=bar3

初期値がセミコロンになった経緯とか知りたかったのですが、ネット(日本語サイト)で検索しても、ほとんど言及されてないんですね。みんな CGI モジュールで QUERY_STRING を吐き出したりしないんでしょうか...。

[を] CGI.pmでのパラメタの調整 がヒントになりました。だんだん。

0 件のコメント: