CDBIでdelete後のオブジェクトを使うと以下のようになります。
$ perl -MFilm my $f = Film->create_test_film(); $f->delete(); $f or die; # 【結果】 # Operation `bool': no method found, argument in overloaded package Class::DBI::Object::Has::Been::Deleted at - line 3.
ここで言うFilmは、http://search.cpan.org/src/TMTM/Class-DBI-v3.0.16/t/testlib/Film.pmです。
解決法
- deleteしたオブジェクトなんか使うんじゃない
- CDBIなんか使うんじゃない
原因?
行き着いたのは、この問題でした。Class::DBI#delete() の中で、
bless $self, 'Class::DBI::Object::Has::Been::Deleted';
としてるのですが、こいつがoverloadプラグマを打ち消すに至ってないようです。
bless $_[0], 'Class::DBI::Object::Has::Been::Deleted';
としたら直りました*1。
*1:実際には、$self = shift; とかしてるから@_絡む部分を調整しなくちゃ駄目です