2006年10月24日

見落としている間に…

CGI.pmのバージョンが3.25まで上がってるし…。

過去に2回CGI.pmの変更点を記事にしているので、仕事が落ち着いたらサボっていた間の分も順次記事にしていきたいと思います。

それから、いつやるかは未定ですが、このblogはtDiaryかはてなダイアリーに切り替えると思います。

このblogの記事をブックマークしてくれている方もいらっしゃるので、このblogを削除することはありません。

…というか、中途半端にblogに書いた記事をWikiに清書していかないと。
posted by はしもと at 01:09| Comment(0) | TrackBack(0) | Perl

2006年10月20日

Kansai.pm第7回ミーティング - Plagger World Tour in 大阪に参加しました

参加と言うか一応運営なのだけども、今回は完全に宮川さんにおんぶ抱っこだったので(^_^;。

内容については他の方々が書いていらっしゃるので、ちょっと違う視点から書いて見ます。

会場はデジハリ大阪で、初めての人は地図をしっかり確認しておかないとちょっと道に迷うかも?はい、ボクは迷いました。
会場手配も宮川さんのツテでした。急なお願いにも関わらず会場を提供していただいたデジハリ大阪様に多謝です。

出席確認が取れた参加者は途中参加を含めて63名で、普段のミーティングの倍でした。しかもそのほとんどが初参加、半数(以上?)がMLに参加していない方たちでした。Kansai.pmって知名度低いのかなぁ。

残念ながら時間に間に合わず、その後の飲み会だけ参加された方も数名いらっしゃいました。でも、大阪で宮川さんと飲みながら話をできる機会はそうそう無いだろうから、これはこれで貴重な時間だったと思います。

アンケートの作成や途中参加者の誘導など、今回からlapis25さんが運営側として参加してくださいました。とても頼もしいです。

ボクは初めと終わりに少し前に出てしゃべりましたが、元々あがり症で人前に出るのがものすごく苦手なので、完全に目が泳いでました。もっとイベントを開催して慣れていかないと。

提出してもらったアンケートは週末を目標にまとめてイベント報告ページに書く予定です。来週末になったらごめんなさいorz。とりあえず写真だけアップしてみました。

今回のイベントをきっかけに「これからも参加したい」と言ってくれる人もいらっしゃいました。MLに「何かやりましょう」とメールを流してくれればとりあえずボクは動きます。Kansai.pmの活動を今までより活発にしていきたいですね。

最後に、宮川さん、本当にありがとうございました。いずれ必ずKansai.pmからゲストとして招待させてもらいます。
posted by はしもと at 02:13| Comment(0) | TrackBack(0) | Perl

2006年10月11日

Kansai.pm第7回ミーティング - Plagger World Tour in 大阪

mixiやMLへの告知はしたけど、自分のblogで紹介していませんでした(^_^;。

2006年10月17日(火)にKansai.pm第7回ミーティング - Plagger World Tour in 大阪を開催します。

宮川さん直々の講演です。時間の都合のつく方はぜひご参加ください。

ちなみにボクはまだPlaggerを使ったことがありません。当日までに「まるごとPerl! Vol.1」で予習しておきます。
posted by はしもと at 22:41| Comment(2) | TrackBack(0) | Perl

2006年07月02日

TMPL_NOW filter

HTML::Templateモジュールのfilterサンプルを紹介します。TMPL_NOWというテンプレートタグを追加して、現在日時を表示するものです。
#!/usr/local/bin/perl

use strict;
use warnings;

use HTML::Template;
use POSIX qw/ strftime /;

MAIN:{
    my $tmpl = HTML::Template->new(
        filehandle => *DATA,
        filter     => \&tmpl_filter_now,
    );
    print $tmpl->output;
}

sub tmpl_filter_now {
    my $text_ref  = shift;
    my @localtime = localtime;

    print $$text_ref;
    
    $$text_ref =~ s{
        <(?:!--\s*)?TMPL_NOW\s+FORMAT=(["'])(.*?)\1\s*(?:--)?>
    }{
        strftime( $2, @localtime )
    }xgise;
}

__END__
<TMPL_NOW FORMAT="%Y/%m/%d %H:%M:%S">
<!-- tmpl_now format='%Y年%m月%d日 %H時%M分%S秒' -->
表示フォーマットはFORMAT属性で指定します。POSIX::strftime()にそのまま渡されます。

あくまでサンプルなので、あまり複雑にならないようにしています。正規表現はもう少し工夫した方がいいのかも?

cache系のオプションを使うと、多分最初に実行されたときの日時で固定になると思うので注意しましょう。

TMPL_VARで設定した日時データを表示する目的には使えません。
posted by はしもと at 23:20| Comment(0) | TrackBack(0) | Perl

2006年06月12日

CGI::Session::ExpireSessions 1.08がリリースされました

CGI::Session 4.14がリリースされたことを受けて、古くなったセッションデータを掃除するモジュールのCGI::Session::ExpireSessions 1.08がリリースされました。

CGI::Session::ExpireSessionsはこれまで独自にセッションデータを処理していましたが、今回のCGI::Session::find()のaccess time書き換え問題がfixされたことで、CGI::Session::find()を使うexpire_sessions()メソッドが追加されていました。

これまでのexpire_db_sessions()メソッドとexpire_file_sessions()メソッドも引き続き使えるようですうが、CGI::Session 4.14以降を使えるのであればCGI::Session::ExpireSessions 1.08を導入してexpire_sessions()を使うようにした方が良さそうですね。
posted by はしもと at 18:54| Comment(0) | TrackBack(0) | Perl

CGI::Session 4.14がリリースされました

6月11日付で、CGI::Session 4.14がリリースされました。
Changesに書いてある内容を追いかけてみます。

訳文を書いていますが、あまり信用しないでください(^_^;。

NEW: The find() command now has better documentation.

「find()コマンドのドキュメントが新しくなった」ということかな?次にfind()の変更についての記述があるので、ここは軽く流します。

FIX: find() no longer changes the access or modified times

「find()はaccessとmodifiedの時刻を変更しないようになった」かな?
これまでのバージョンでは、find()メソッドを使用して保存されているセッションデータを検索した場合でも、_SESSION_ATIMEが書き換えられてしまっていたようです。
このため、古いセッションを探して削除するような処理にはfind()を使えない、ということになってしまっていました。これがこのfixで解消されたのでしょう。

FIX: param() called with two parameters now returns the value set, if any

「param()は二つのパラメータで呼ばれた時に、設定した値を返すようになった」かな?
これまでは、param()に二つのパラメータを渡す、つまりキーと値を指定して値を書き換えた時に、常に真値(数値の1)を返していました。
これが、このfixで、設定した値をそのまま返すようになったようです。

ソースを読んでみたところ、param()は
    $s->param($name1 => $value1, $name2 => $value2 [,...]);
という記述を許可しています。一度に複数のキーと値のセットを変更できるということですね。
この呼び出しの場合、param()が返す値は$value1になるようです。
これはドキュメントに書いていない方法なので、使う場合には注意した方がよさそうです。

FIX: driver, serializer, and id generator names are now untainted

「driver、serializer、そしてid生成名はuntaintされるようになった」かな?
これまで、インスタンス生成時に渡される
"driver:DB_File;serializer:FreezeThaw"
のようなData Source Nameは、分割されてもuntaint処理はされていなかったようです。これが、
"CGI::Session::Driver::" . ($self->{_DSN}->{driver} =~ /(.*)/)[0]
のように、untaint処理をしてからモジュール名を生成するようになっていました。

INTERNAL: automatic flushing has been documented to be unreliable, ...

ちょっと長いので文章を切りました。実際にはこう書いてあります。
INTERNAL: automatic flushing has been documented to be unreliable, although it was recommended in the past. Automatic flushing can be affected adversely in persistent environments and in some cases by third party software. There are also some cases in which flushing happened automatically in 3.x, but quit working with 4.x. See these tickets for details.

http://rt.cpan.org/Ticket/Display.html?id=17541
http://rt.cpan.org/Ticket/Display.html?id=17299
長くて、ボクの英語力では訳文を載せることはできません(^_^;。意味としては「自動フラッシュは3.xの頃は動作していたが、4.xではしないようにしてください」みたいな感じのようです。ああ、これすら怪しいかも…。

二つあるURLの一つ目は、DESTROYブロックでflush()メソッドを呼び出すようにするとおかしなことになる、ということのようです。

二つ目もflush()メソッドに関することのようです。

Session.pmのdiffを見ても、これに関するソースコードの修正は無さそうでした。見落としている可能性はありますが。
ドキュメントには、flush()メソッドの項に文章が追加されています。
Synchronizes data in memory with the copy serialized by the driver. Call flush() if you need to access the session from outside the current session object. You should at least call flush() before your program exits.

As a last resort, CGI::Session will automatically call flush for you just before the program terminates or session object goes out of scope. This automatic behavior was the recommended behavior until the 4.x series. Automatic flushing has since proven to be unreliable, and in some cases is now required in places that worked with 3.x. For further details see:
この後に、さっきのURL二つが続きます。

前半はプログラム実行中にflush()メソッドを使うべき、みたいな記述だと思うのですが、間違っているかもしれない文章を書いて、たまたまそれを見つけた人が混乱してしまうかもしれないので、原文そのままにしておきます。
以上、曖昧な点の多い文章になってしまいましたが、CGI::Session 4.14の今回のUpdateについてでした。
posted by はしもと at 03:04| Comment(0) | TrackBack(0) | Perl

2006年06月11日

Kansai.pm 第1回Perl翻訳フェスタ

6月10日(土)、Kansai.pm主催の「Kansai.pm 第1回Perl翻訳フェスタ」に行ってきました。

このイベントは、
みんなで集まってPerl関係の文章を翻訳しよう!
という主旨のイベントです。

イベントの告知が遅くなって直前に流したにも関わらず、9名ぐらいの参加がありました。

ボクは英語のドキュメントは目を通してある程度の意味をなんとか読み取ることはできるけど、翻訳という形で文章にするほどの英語力がないので、翻訳された日本語文章のチェック係のつもりで参加してきました。

最初に、翻訳支援ツールの「OmegaT」について、Skypeを使ったリモート講演で説明してもらいました。Javaベースのツールで、MacOS Xならインストールも楽々。アーカイブを展開するだけで環境が整います。

昼食を食べて、「perldocjp」についての講演を聴き、翻訳開始。

最初、perldocjpに登録されているモジュールの翻訳ドキュメントの「Config::Simple 4.55」を元に、最新バージョンの4.58のドキュメントを翻訳してみようと考えました。

両バージョンのアーカイブをダウンロードし、PODを抜き出してdiffで比較してみると…。ドキュメントは全然変更されていませんでした。どうやら、この2つのバージョン間の違いはバグ修正のみで、ドキュメントには変更がなかったようです。

その後、少しPerl6::Pugsの付属文章の翻訳をしてみようとしたのですが…。ははは…。

夜、19時半頃に残っていた5人で夕食に出かけました。会場近くにあるイタリア料理のお店です。

料理はとても美味しかったのですが、出てくるのがゆっくりで、食べ終わったのがイベント終了予定の22時直前でした。こういう店には時間があるときに行かなければ。

イベントの感想としては、えっと…。

OmegaT、フリーだけどとてもよくできたソフトだと思います。翻訳メモリとして蓄積されていくので、ドキュメントのバージョンが上がった時にもバージョンの追随が簡単になりそうです。

翻訳を開始してしまうとみんなで黙々と作業する事になるので、2時間毎とか定期的に休憩を挟んで情報交換とかをするのも良さそうです。

こういうイベントは継続して定期的に行わないといけないですね。イベント発案の井上さんも次回は年内には開催したい、と話していたので、またお手伝いとしてでも参加したいと思います。
posted by はしもと at 15:55| Comment(0) | TrackBack(0) | Perl

2006年04月24日

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

4月23日付けで、CGI.pm 3.20がリリースされていました。

Changesを見ると、変更点は3つ。

1つめ。CGI::Cookie->bake()メソッドへのpatch。これはdiffを見てみます。
@@ -182,7 +182,7 @@
           : Apache->request
   } if $MOD_PERL;
   if ($r) {
-      $r->headers_out->set('Set-Cookie' => $self->as_string);
+      $r->headers_out->add('Set-Cookie' => $self->as_string);
   } else {
       print CGI::header(-cookie => $self);
   }
set()メソッドからadd()メソッドに変更されています。set()メソッドを使うと、先に設定されていた他のパラメーターを消してSet-Cookieだけに置き換えてしまうから問題になることがあったのでしょう。Changesの記述から、特にmod_perl環境のための対処のようです。

…ゴメンなさい、自分ではCGI::Cookie->bake()は直接使ったことがないので想像でしかありません。

2つめ。Changesではstart_form()の問題のような記述ですが、実際に修正されているのはstart_multipart_form()でした。これもdiffを見てみます。
@@ -1825,9 +1826,7 @@
 sub start_multipart_form {
     my($self,@p) = self_or_default(@_);
     if (defined($p[0]) && substr($p[0],0,1) eq '-') {
-       my(%p) = @p;
-       $p{'-enctype'}=&MULTIPART;
-       return $self->startform(%p);
+      return $self->startform(-enctype=>&MULTIPART,@p);
     } else {
        my($method,$action,@other) = 
            rearrange([METHOD,ACTION],@p);
修正前は-enctypeを指定していても&MULTIPART、つまりmultipart/form-dataで強制的に書き換えられていました。これが、-enctypeを指定していた場合は、その指定した値が使われるようになっています。

3つめ。3.19で変更されたPATH_INFO周りのコードの修正のようだけど…。とりあえずこれもdiffを見てみます。
@@ -2778,7 +2777,8 @@
    my $raw_path_info   = $ENV{PATH_INFO}   || '';
    my $uri             = unescape($self->request_uri) || '';
 
-   $raw_script_name =~ s/\Q$raw_path_info$\E//;
+   my $protected    = quotemeta($raw_path_info);
+   $raw_script_name =~ s/$protected$//;
 
    my @uri_double_slashes  = $uri =~ m^(/{2,}?)^g;
    my @path_double_slashes = "$raw_script_name $raw_path_info" =~ m^(/{2,}?)^g;
正規表現の中で\Q\Eを使ってメタ文字を処理していたのを、quotemetaで先に処理しています。

でも…これって関係無いような?

元のコードで問題なのは、\Eの前に末尾を表すはずの$が入ってしまっていたことだと思うのだけど…。
  $raw_script_name =~ s/\Q$raw_path_info\E$//;
これなら問題ないと思うのだけど、他に問題あるのでしょうか?
posted by はしもと at 13:20| Comment(0) | TrackBack(0) | Perl

2006年04月21日

DBIでデータベースの内容をハッシュ配列で取得する

今時のPerl使いの方は、データベースアクセスにはClass::DBIを使っているのでしょうか?

ボクは仕事柄Class::DBIを使えないサーバーで動かすCGIを作ることが多いので、今でもDBIを使っています。Class::DBIも勉強しなきゃなぁ…。

それはともかく、SELECT文の結果をハッシュ配列で取得する方法を書いてみます。

バージョン1.20より古いDBIでは、$dbhをデータベースハンドルオブジェクトとした場合
my $sql = 'SELECT id, name FROM test WHERE age < ?';
my $rows = $dbh->selectall_hashref( $sql, undef, 20 );
のようなプログラムで
$rows = [
{ id => 1, name => 'aaaa' },
{ id => 2, name => 'bbbb' },
];
のような値が取得できました。

バージョン1.20でこの仕様が変更になっています。

同じような値を取得するには、selectall_hashref()メソッドではなく、selectall_arrayref()メソッドを使います。
my $sql = 'SELECT id, name FROM test WHERE age < ?';
my $rows = $dbh->selectall_arrayref( $sql, { Columns => {} }, 20 );
第二引数として、{ Columns => {} } を渡すのがポイントです。

これは、ステートメントハンドルメソッドのfetchall_arrayref()を使う場合に空のハッシュを渡すことに相当します。
my $rows = $sth->fetchall_arrayref( {} );
DBIには、引数として\%attrを渡すメソッドが多いけど、具体的にどのような値を渡せばいいかイマイチわかりにくいんですよね。←ボクだけ?

Googleで日本語サイトを対象に検索してみてもこのselectall_arrayref()に{ Columns => {} }を渡すやり方を書いているのは、ボクがKansai.pmのイベントで発表した資料だけでした。当たり前すぎるのか、案外知られていないのか、需要が無いのか、さて、どれでしょう(^^;?

なお、バージョン1.20は2001年8月24日リリースです。さすがに今時のサーバーではそれ以前の古いバージョンをインストールしていることは無いと思うので、古い方法を覚えておく必要はないでしょう。

そのうち、Wikiの方にもうちょっとまとめて書きます。いつになるかは…ゴニョゴニョ。
posted by はしもと at 12:20| Comment(0) | TrackBack(0) | Perl

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

2006年04月16日

Jcode 2.04がリリースされました

Perl5.6でUTF-8のメールを送信するためにいろいろ調べていたら、Jcodeのマニュアルに書いてあった
$j->MIME_Header;
というメソッドが動作していないことを見つけました。

念のためにいろいろ確認したけどどこにも問題を書いているサイトはありませんでした。Patchを作ってみようとしたけど、仕事の時間がヤバかったので仕方なく問題点だけをJcodeのMLに報告しました。

早速Danさん自ら修正し、Jcode 2.04としてリリースしてくださいました。ありがとうございました。

MIME_HeaderメソッドはPerl5.8.1以降しか使えないから、Perl5.6では使えないんですけどね(^^;。仕事では別の方法でとりあえず逃げておきました。
posted by はしもと at 13:51| Comment(0) | TrackBack(0) | Perl

2006年04月14日

止まっていたCPANのデータ更新が復活

今日の夕方ぐらいに、10日以来更新されていなかったCPANのデータがまとめて更新されました。

CGI::Session 4.13はBug fixの結果、BSD系OSへのインストールができるようになっていました。

CGI::Applicationは4.06がリリースされていましたが、テストが変更になっただけでモジュール自体は4.04から変わっていません。

CPANは、この前もデータ更新が止まっていたし、やっぱり調子悪いのかな?
posted by はしもと at 21:15| Comment(0) | TrackBack(0) | Perl

2006年04月13日

CGI::Session 4.13がリリースされました

MLからの情報です。

これを書いている時点では、まだCPANの情報は更新されていませんでした。というか、またCPANの更新が遅れてるような?

今回はBug fixが3つ。

一つはcookieのバグ。Patch提供者は日本の方でした。

他二つはどちらもDB_Fileかな。BSD系OSでmake testで出ていたエラーが修正されていればいいのだけど。
posted by はしもと at 02:31| Comment(0) | TrackBack(0) | Perl

2006年04月12日

「実用Perlプログラミング」購入

昨日は、PHP5の本を見に行くために、いつもより少し早めに会社を出て梅田のヨドバシカメラに行きました。

でも、PHPの本ってどれを選べばいいのかわかりにくい…。できれば最新バージョンの5.1.2に対応したものがいいけど、まだあまり無いみたいだし。定番のマンモス本は発売から1年以上経ってるから、今から買うのもちょっと抵抗が。

PHPの本って、一昔前のCGI本みたいなのが多い気がして、それも買いたくない理由の一つだったり。

オライリーからもPHP本が出てたっけ、と思ってオライリーコーナーに行って「初めてのPHP5」を眺めていたら、「実用Perlプログラミング」が目に付いて、こちらを買ってしまいました(^^;。

まだ全然目を通してもいません。一体いつ読むことやら。
posted by はしもと at 10:24| Comment(0) | TrackBack(0) | Perl

2006年04月09日

CGI::Session 4.12リリース

4月7日付で、CGI::Sessionの4.12がリリースされていました。

SECURITY: Fix possible SQL injection attack.

ということで、PostgreSQL、MySQL、SQLiteのような内部でSQLを使っている場合にはアップデートが必須なようです。

どうなっていたかを調べてみると、こんな風になっていました。

4.12以前はremove()メソッドで
my $sql = sprintf("DELETE FROM %s WHERE id='%s'", $self->table_name, $sid);
となっていて、$sid、つまりセッションIDにいたずらされていると危険でした。

4.12では、place holderを使うように修正されています。

ところで、4.10以降のバージョンではBSD系のOSにインストールしようとしたときに、make testでエラーになるようです。MacOS Xもダメでした。

なんでかな?本家MLでもすでに報告されているので、近いうちに修正されるとは思うけど…。
posted by はしもと at 13:54| Comment(0) | TrackBack(0) | Perl

2006年04月05日

CGI::Session 4.11リリース

昨日はCPANが調子悪かったのか、search.cpan.orgのrecentを見ていてもずっと更新されていませんでした。

夜になってようやく更新されて、4月3日付けでCGI::Session 4.11がリリースされました。4.10でのnameメソッドバグが修正されています。

でも、結局今回のnameメソッドの仕様変更の意味が見えてこない…。

今回のnameメソッドの仕様変更は前にも書いたように、パッケージ変数 $CGI::Session::NAME だけでなくインスタンスとして内部で $self->{_NAME} にセッション名を設定できる、というものです。

しかし、CGI::Sessionオブジェクトを生成する前にセッション名を決めておかないと、new()を実行したときに内部でload()でセッションデータの読み込みをしてしまうので、後で名前を変更しても意味がないと思うのです。せめて、new()の引数としてセッション名を渡せるようにならないと…。

他のシステムと連携していて、常に新規セッションを作るだけでいい場合にはセッションデータの読み込みは不要になるから、この場合の為の仕様変更ということかな?

ドキュメントとソースコードを読んで、もっと調べてみなければ。perldoc.jpにある3.11のドキュメントを中心に見てたから、後で追加されているload()やfind()の使い方もわかってないし。

ついでに、古いセッションをお掃除するCGI::Session::ExpireSessionsのバージョンも上がっていました。このモジュール、もうちょっと使い勝手がよければなぁ…。serializerはData::Dumperにしか対応していないし、driverはdb系とfileだけだし…。
posted by はしもと at 12:55| Comment(0) | TrackBack(0) | Perl

2006年04月04日

ぱるま(Perlish Magazine)

今更ながらのエイプリルフールネタだけど、これを書かないわけにはいかないでしょう(^_^;。

ぱるま(Perlish Magazine)

なんとも気合の入ったネタコンテンツです。

企画自体はネタなのに、内容はとても濃いです。

この企画のためだけに、わざわざPerl製WikiクローンのFreeStyleWikiまでインストールしています。

…ごめんなさい、これを書いている時点で、まだ一割ぐらいしか読んでません。

そろそろEncodeモジュールの使い方を覚えないといけないので、Ktatさんの「 標準添付ライブラリ紹介 〜Encode〜」の記事からじっくり読んで行きます(^_^;。
posted by はしもと at 03:10| Comment(0) | TrackBack(0) | Perl

2006年03月31日

CGI::Session 4.10のnameメソッドBug

CGI::SessionのVersion4.10にて、nameメソッドの仕様が変更になっています。

4.09まではパッケージ変数 $CGI::Session::NAME を操作するクラスメソッドでした。

これが4.10になって、$self->{_NAME}を操作するインスタンスメソッドに変更になっています。このメソッドを使わずにパッケージ変数を変更する方法も可能です。

セッション名を
$CGI::Session::NAME = 'SESSION_NAME';
として指定していれば、4.10にバージョンアップしても問題ありません。

マニュアルに従って
CGI::Session->name( 'SESSION_NAME' );
my $session = CGI::Session->new( ... );
のようにクラスメソッドとしてnameメソッドを使ってセッション名を指定する方法を用いている場合、4.10にバージョンアップするとエラーが発生します。

これは既にメーリングリストで報告されていて、次のバージョンでfixされるそうです。

早くリリースされないかな…。
posted by はしもと at 15:51| Comment(0) | TrackBack(0) | Perl

HTML::Templateのfilterオプション

最初のネタとして、Kansai.pmの発表で使ったHTML::Templateのfilterオプションについての話を書き直しています。

filterオプションではあまり凝ったことをすべきじゃないと思うけど、改行コード変換、文字コード変換、テンプレートタグの省略記法定義ぐらいであれば有用かな、とも思います。

HTML::Templateモジュールは「テンプレートには極力ロジックを持ち込まない」という思想があるみたいだけど、表示をアレコレいじるのはプログラム側ではなくテンプレート側でやるべきだとボクは考えるので、やっぱりもう少しテンプレートモジュールに機能が欲しいところです。

例えば、2カラム表示のテーブルがあったとして、これを3カラム表示に変更したいだけなのに、わざわざプログラムを変更するのは、やっぱりちょっと違うと思うし。
posted by はしもと at 12:48| Comment(0) | TrackBack(0) | Perl