23章 Perlでオブジェクト指向 メンバー関数の隠ぺい

メンバー関数を隠ぺいするには、関数をmyで定義します。
my $calc3 = sub{}
といった感じで。
これを呼ぶときは
$self->$calc3()
とします。calc3()の前に$が付いていることに注意してください。
$self->calc3()
ではありません。

ファイル名:Human.pm

package Human;
###########
sub new
{
my $class = shift;
return bless {}, $class;
}
###############
my $calc3 = sub
{
my ($self,$x,$y) = @_ ;
my $c = $x * $y ;
return $c;
};
#############
sub calc4
{
my ($self, $j,$k) = @_ ;
my $h = $self->$calc3($j,$k); # ->の後ろに$をつける
print “Human->calc4 = $h”;
}
##############
1;

 

実行ファイル:test1.pl

use Human;

my $man = Human->new();
$man->calc4(4,2 );

実行結果

>perl test1.pl

Human->calc4 = 8

calc4()の中でcalc3()が呼び出されています。

次に、
実行ファイル名:test2.pl

>perl test2.pl

Can’t locate object method “” via package “Human” at test2.pl line 7.

$man->$calc3()は直接実行できませんでした。
$man->calc3()でも実行できません。

次に、

>perl -c test2.pl

test2.pl syntax OK

文法チェックは通ってしまいます。
ので注意です。