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 件のコメント:
コメントを投稿