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