■2005-08-18
* [今月のAcme] Perlを超えて
前回に引き続き、(夏休み無いけど)夏休み特集第二弾。 懲りずに自作モジュール。 Acme::BeyondPerl::ToSQL。
use Acme::BeyondPerl::ToSQ ("dbi:SQLite:dbname=acme_db","",""); my $value = 5; print 2 + $value; print 1.2 - 0.2; print 9 / 2;
一見すると何も変わっていませんが、useしたファイル内での数値計算をデータベース側で行っています。デバッグオプションをセットすると
SELECT 1.2 - 0.2 # 桁省略 SELECT 9.0 / 2.0 SELECT 2.0 + 5.0
というSQL文が発行されているのがわかります。これでもはやPerlの力を借りずとも、計算ができる! ……Perlの力を借りてDBとやりとりしているのは気にしない方向で。
仕組みは単純で、定数オーバーロードを利用して数値をオブジェクトにし、後は演算子オーバーロードでSQLを発行するだけです。デバッグモードにすると実行前に定数が先に処理されてるのが視覚的にわかりますね。
PostgreSQLやMySQLを使うと、sqrtやlog、atan2などのoverload可能な多くの関数が利用できます。
* [メモ] Acme::Inline::SQL
どうせなら Acme::Inline::SQL とかにしてほしかった(本日のコメント欄)
あー、Inline::SQLって何処かで見たような気がしたのですが、CPANで探しても無いですね。
$xored = eval_sql(q| SELECT 1 # 2 |);
みたいな感じかしら。 ちなみに普段PostgreSQL使っているので、MySQLを使うときに『PostgreSQL&MySQL逆引き大全』が結構重宝します(Amazonの書評にはバージョンが書かれていないとありますが、最初の方に対応バージョンが載っています)。
タイトルどおり、Ligua::JA::NumbersをReleaseしました。CPANからまだ取れなければ
http://www.dan.co.jp/~dankogai/cpan/Lingua-JA-Numbers-0.02.tar.gz
にて入手可能です。
どうせなら Acme::Inline::SQL とかにしてほしかった。<br><br>Dan the Man with Too Many Languages Spread Inline