Perl6でデータベースを扱いたいとき
ロンドンで話を聞いたInline::Perl5の印象が強すぎてうっかり存在を忘れていたのですが、特に複雑なことをするのでなければ、最新のRakudo Starに同梱されているDBIishというモジュールを使うと、Perl5のDBIと同じような書き方ができるようになっています。たとえばSQLiteのデータベースを扱うのであれば、Rakudo StarとSQLiteのライブラリ(libsqlite3的なもの)をインストールしたあと、こんなコードを書けばOK。
use v6;
use DBIish;
my $dbh = DBIish.connect("SQLite", :database, :RaiseError); $dbh.do("CREATE TABLE IF NOT EXISTS foo (id, text)");
my $sth = $dbh.prepare("INSERT INTO foo VALUES(?, ?)");
$sth.execute(1, "test");
$sth.finish;$sth = $dbh.prepare("SELECT * FROM foo");
$sth.execute;
my $rows = $sth.fetchall_arrayref();
say $rows.perl;
2015年1月の時点では、SQLiteのほか、MySQL(mysql)とPostgreSQL(Pg)用のDBDishなモジュールも同梱されています。裏ではNativeCallというモジュールが使われていて、Perl5のXSでごりごり書いてあるものに比べるとはるかに読みやすい(うらやましい)のですが、NativeCallは用意するライブラリがどうコンパイルされたかなどをあわせないと正しく動作してくれないので、Windows環境では一手間必要。ドキュメントについては p6doc DBIish とか p6doc DBDish をご覧ください。