モジュールの作り方はわかりました。
では、うまく利用してみましょう。
モジュールA → モジュールB → メイン処理
AはBの親で、Bはメイン処理の親という場合。
- モジュールA
コンストラクタ sub new { my $class = shift; my %op = @_; #ハッシュで受け渡しするために作る my $self = { tmpl _dir => $op{tmpl_dir}, tmpl_message => $op(tmpl_message); } bless $self, $class;
- モジュールB
モジュールBは、モジュールAの子クラスになります。
use base qw(モジュールA); use vars qw($VERSION); $VERSION = 1,00; sub new { my $class = shift; my %op = @_; #親の処理を呼び出す my $self = $class->SUPER::new(%op);
ここで、モジュールBのコンストラクタを作っているのですが、
親がいますから親のコンストラクタを呼び出します。
$self->{tmpl_kakunin} = $op{tmpl_kakunin}; return $self;
このように、属性(変数)を増やして行くのですが、
子モジュールなので$self->をつけなくてはなりません。
returnするのも、$selfだけです。
blessは親がしてますからね。
そしてようやくメイン処理。上まではモジュールなので
触ることはありませんよね。
- メイン処理
まず変数に値を入れます。
my $flogstyle = new Meatflog (
孫?モジュールを呼び出して、変数をセットします。
tmpl_kakunin => 'panda_kakunin.html',
ここはいつも通りに。
で、忘れてはいけないのが、これを実行します。
$flogstyle -> run();
このrunは、親モジュールのメイン処理サブルーチンの名前です。
ここで言うと、モジュールBの親の、モジュールAのメイン処理の名前になります。。
続いて、子モジュールのメイン処理。
package Meatflog;
モジュール名を宣言。
use base qw(モジュールB);
モジュールBが親なので、それを継承します。
モジュールBには、モジュールAを継承するように書かれています。
そして、この下にサブルーチンを書いて行きましょう。
親と違う、このプログラム独自のものを書きましょうね。
その際、親とかぶってる場合は、
$self -> SUPER::start();
これでオーバーライドされます♪
これが、一通りの流れになりま〜す♪