複数パッケージ入りクラスのメソッドをオーバーライド。
先日の「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 って書き直せばいいんだけどさ。
てなこったで、あとはテストしまくらないとなー。うー。