blessとisa
スカラ変数に記憶した値の種類を判定する関数isaは,blessの有無によって複数の使い方ができます.まず, オブジェクトSamを定義した場合です.
#!/usr/bin/perl -w use strict; use UNIVERSAL qw(isa); package Sam; sub new{ return bless {},shift; } package main; my $aSam=Sam->new; print 'isa($aSam,\'San\'): '.isa($aSam,'Sam')."\n"; # (1) print '$aSam->isa(\'Sam\'): '.$aSam->isa('Sam')."\n"; # (2)
クラスSam
のインスタンス$aSum
をisa
関数の第一引数として指定するやり方(1)と,クラスSam
のメソッドとしてisa
を呼ぶやり方(2)の二通りが可能となります.実行結果は以下の通り同じです.
$ Sam.pl isa($aSam,'San'): 1 $aSam->isa('Sam'): 1
bless
がないとメソッドisa
を呼ぶ記述はエラーになります.以下のコードを実行すると
#!/usr/bin/perl -w use strict; use UNIVERSAL qw(isa); my $array=[1,2,3,4,5]; print 'isa($array,\'ARRAY\'): '.isa($array,'ARRAY')."\n"; print '$array->isa(\'ARRAY\'): '.$array->isa('ARRAY')."\n"; # $arrayのメソッドisaを呼ぶ
このような結果となります.
$ Array.pl isa($array,'ARRAY'): 1 Can't call method "isa" on unblessed reference at ./sam.pl line 7.
bless
を使うとこうなります.
#!/usr/bin/perl -w use strict; use UNIVERSAL qw(isa); bless $array,'Arr'; # $arrayをArrのクラスにする print 'isa($array,\'Arr\'): '.isa($array,'Arr')."\n"; print '$array->isa(\'Arr\'): '.$array->isa('Arr')."\n"; # $arrayのメソッドisaを呼ぶ
$ Array.pl isa($array,'Arr'): 1 $array->isa('Arr'): 1