frei

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

汚染されないメンバ変数。

前々からperl打ちながら、クラスのメンバ変数が

外部から汚染されやすい仕組みをどうにか出来ないかなぁ…と思ってたのですが。

ある日、クロージャ使えばなんとかなるんじゃない?と気付いて

試してみよーと思いつつも、実験する時間がなかったのでした。

てな訳で、今朝どーしてもやってみたくなったので、少し実験。

って、もう誰かやってるんだと思うけど

自分で実装してみないと気が済まない性格なんで、ご勘弁ー。

・Test.pm

package Test;

sub new {

my $me = shift;

my $_name = '';

bless {

'name' => sub {

my $value = shift || undef;

if (defined $value) {

$_name = $value;

} else {

return $_name;

}

}

}, $me;

}

sub name {

my $me = shift;

my $value = shift || undef;

return $me->{'name'}($value);

}

1;

・test.pl

#!/usr/bin/perl -w

use strict;

use Test;

my $objTest = Test->new();

$objTest->name('anigon');

print $objTest->name;

exit;

・・・長いなぁ、sub new んところ。

なんかもっとうまくまとめられそうな気がするんだけどなぁ。