実は空文字かundefでblessすると勝手にmainにしてくれるんだ
日々ちょっとした発見ってあるもので、お題目通り空文字かundefでblessするとそのオブジェクトはmainパッケージとして扱われるようです。
コード
use strict; use warnings; use Data::Dumper; my $self = bless({foo => 'bar'}, undef); print Dumper $self;
結果
Use of uninitialized value in bless at undef_bless.pl line 5. Explicit blessing to '' (assuming package main) at undef_bless.pl line 5. $VAR1 = bless( { 'foo' => 'bar' }, 'main' );
怒られメッセージにも出てますけど確かにmainとして装われてますね。
もちろん↓でも同じ結果。
my $self = bless {foo => 'bar'}, '';
という事はmainのサブルーチン呼び出せるんじゃね?
main::fooとかオブジェクトメソッドとして呼び出せる筈だよねん。
という事でやってみたら出来た!
use strict; use warnings; use Data::Dumper; sub say { my $self = shift; my $str = shift; print "$str\n"; } my $self = bless({}, undef); $self->say('hello!');
hello!
まぁ警告出てるんで率先してやってはいかんですね・・。