共通な処理をまとめたい
ずっとスーパークラスに共通処理をまとめて書いてたけど、↓なやり方でも可能だったメモ。
- ツール
use strict; use lib qw(./); use File::Test; use Data::Dumper; my $test = File::Test->new(); my @work = qw( aaa bbb ); foreach ( @work ) { my $cmd = "create_" . $_; $test->$cmd; } print Dumper $test;
- File::Test
package File::Test; use strict; use base qw( File::AAA File::BBB ); sub new { return bless { }, shift; } sub create { my $self = shift; my $from_package = shift; print __PACKAGE__ ."->create! ( 実行元は$from_package )\n"; return 1; } 1; __END__
- File::AAA
package File::AAA; use strict; use vars qw( $namespace ); $namespace = 'aaa'; sub create_aaa { my $self = shift; $self->create( __PACKAGE__ ); $self->{ $namespace } = "I am aaaa"; return 1; } 1; __END__
- File::BBB
package File::BBB; use strict; use vars qw( $namespace ); $namespace = 'bbb'; sub create_aaa { my $self = shift; $self->create( __PACKAGE__ ); $self->{ $namespace } = "I am bbbb"; return 1; } 1; __END__
実行結果
File::Test->create! ( 実行元はFile::AAA ) File::Test->create! ( 実行元はFile::BBB ) $VAR1 = bless( { 'bbb' => 'I am bbbb', 'aaa' => 'I am aaaa' }, 'File::Test' );