my でメンバーデータを定義する方法だと、
実はそれはクラスの共有変数になっていまいました。
メンバーデータのような実は違うような。
では、メンバーデータをオブジェクトのハッシュ値で定義してみましょう。
ファイル名:Human.pm
package Human;
use strict; ########### my $self = {}; my $c = $self->{a} + $self->{b} ; |
実行ファイル名:test1.pl
use strict; use Data::Dumper; use Human; my $man = Human->new(); $man->calc2( ); |
実行結果:
>perl test1.plHuman->calc2 = 3 Human->calc2 = 11 |
2つのオブジェクト$manと$man2のメンバーデータがそれぞれ違うこと、
別メモリにとられていることがわかりました。
これこそクラスのメンバーデータらしくなってきました。
では次をみてみましょう。
実行ファイル名:test2.pl
use strict; use Data::Dumper; use Human; my $man = Human->new(); $man->{b} = 5; $man->{d} = 10; |
実行結果:
>perl test2.plHuman->calc2 = 3 Human->calc2 = 6 10 |
オブジェクトの外部から $man->{b} なんてアクセスができたりします。
また、$man->{d} なんてクラス作成時に定義するつもりもなかった
メンバーデータが後付できたりします。
つまり、privateなメンバーデータではないです。隠ぺいできていません。
publicっぽい。
でも、後付できるので本当のpublicでもない。