2006年04月18日

CGI.pm 3.19がリリースされました

4月17日付けで、CGI.pm 3.19がリリースされました。

Changesを見てみたところ、変更点は4つ。

1つめ。use_tempfileという内部フラグが追加されて(デフォルトは真)、これが真の場合にアップロードされたファイルデータを一時ファイルに出力するようになった、ということかな。

このフラグは、upload_hookと一緒に使うもののようです。upload_hookとは、アップロードされたファイルデータを一時ファイルに出力する前に呼び出されるcallback関数です。このcallbackを使って他の所にアップロードデータを保存する代わりに一時ファイルへ出力したくない、という時にこのuse_tempfileを偽に設定するのでしょう。

有効なcallbackをupload_hookとして登録せずにuse_tempfileを偽に指定してしまうと、アップロードされたファイルデータが消えてしまいます。ご注意を。

…なんて偉そうに書いていますが、これを書くために調べて初めてupload_hookの存在を知ったのでした(^^;。間違えているかも知れないので、よく調べてから使いましょう。

2つめ。urlメソッド内部でURLを組み立てる際に、PATH_INFOをURLから削除する処理で正規表現を使って削除しているのですが、PATH_INFOに正規表現のメタ文字が含まれていた場合に正しく動作しなかった点の修正でした。

3つめ。その他にも、urlメソッドに修正が加えられています。

4つめ。同じくurlメソッドで、サーバーにIISを使用している場合に行っていたPATH_INFOの処理を削除した、のかな?多分、3つめの変更点で加えられた修正の結果、この処理が不要になって削除されたのでしょう。

他にも、リリースされなかった3.18でcharsetについての修正や、paramメドッソについての修正がされていました。

charsetといえば、escapeHTMLを使う場合、
my $query = CGI->new;
$query->charset( 'UTF-8' );
のように、charsetを指定しておかないと変な置換がされてしまうことがあります。

明示的にcharsetメソッドで指定しなくても、
print $query->header( -charset => 'UTF-8' );
のようにcharsetを指定していればheaderメソッド内部で
$self->charset( $charset );
として設定されますが、headerをcallする前にescapeHTMLメソッドを使うと意味がありません。

なるべく早い段階で、charsetメソッドを使って明示的に指定する方がいいようです。
posted by はしもと at 03:22| Comment(0) | TrackBack(0) | Perl
この記事へのコメント

この記事へのトラックバック