次のコードの通り、DBIx::Sunny
を利用した際、$dbh->select_one
を呼び出せるにも関わらず、$dbh->can('select_one')
がfalse
となります。
can
の挙動が、デフォルトと異なり、一見すると困惑します。
use Test2::V0; use DBIx::Sunny; use Types::Standard qw(HasMethods); my $dsn = "dbi:SQLite:dbname=test.db"; my $dbh = DBIx::Sunny->connect($dsn, 'root', ''); ok !$dbh->can('select_one'), '不思議な挙動'; ok $dbh->select_one('SELECT 1'); ok $dbh->UNIVERSAL::can('select_one'); done_testing;
これは、DBIがcan
を上書きし、Driverで実装されているか、あるいはDBIでデフォルトで提供されているメソッドかどうか判定するためです。デフォルトの挙動で動かしたいのであれば、UNIVERSAL::can
で確かめられます。