frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

複数パッケージ入りクラスのメソッドをオーバーライド。

先日の「CGI.pm と Basename.pm。」のバグ修正対応を1つ済ませたので

もう1つを検討してみた結果。

訳あって、CGI.pm を継承したクラスで

メソッドをオーバーライドする羽目に。

で、修正したい箇所、つまり、オーバーライドしたいのは、

前回書いたように MultipartBuffer パッケージの read メソッドなんだけど。

あら、いやだ。

よく考えたら、複数のパッケージが入ったクラスの

継承はやった事ないや(笑)

かくして、参考に CGI::Apache を見つつ

継承したクラス Anigon::CGI

激しく迷走した結果、こんなに簡単に(苦笑)

package Anigon::CGI;

use strict;

use base qw(CGI);

*MultipartBuffer::read = sub {

# ここに修正版 read の内容を書く

};

1;

・・・なんて簡単なんだ orz

本当にこれでいいんか?(汗)

でも、注意したいのは、無名メソッド内に持ってきた read の内容に

MultipartBuffer のグローバル変数 $FILLUNIT がある事。

私が継承した CGI は古いので、$FILLUNIT が入ってるんだけど、

これを、そのまま書き写しちゃうと、エラーになっちゃうのでした。

って、まぁ、$MultipartBuffer::FILLUNIT って書き直せばいいんだけどさ。

てなこったで、あとはテストしまくらないとなー。うー。