■2004-07-28
* [Perl] オブジェクトの共有
久しぶりにithreadsメモを更新。Perlのblessは共有リファレンスに対して効きません。かといって、blessされたリファレンス(オブジェクト)をshareしても、確かに共有化はされますが、何か操作をしようとすると大概うまく動きません(例:'Invalid value for shared scalar')。これは結構不便です。そこでObject::Sharableをつくってみました。
# Perl5.8.1以上、Storable 2.11以上 use Object::Sharable; use CGI; my $cgi = new CGI; share_obj($cgi); # 共有化! $cgi->param('foo','hoge'); threads->new(\&test,$cgi)->join; print $cgi->param('foo'); # 出力は'ok' # share_objしないと値は'hoge'のまま sub test{ shift->param('foo','ok'); }
元のオブジェクトをStorableでシリアル化してクラス内に保存(残念ながらGLOB型はシリアライズできません!)。メソッドが呼び出されるとオブジェクトを戻してAUTOLOADでオリジナルのメソッドを呼び出します。このあと再度オブジェクトをシリアル化することでオブジェクトの状態を更新します。そのため直接$obj->{val} = 1とかやっても他のスレッドに伝わりません。オーバーロードしたオブジェクトに対応するようにObject::Sharable::Overloadも用意してあります。あと、DESTROYが複数回呼び出されないように小細工を。まあ、ほとんど役に立たない実験モジュールですのであしからず。
* [雑感] さくらインターネットの新サービス
このサイトは、さくらインターネットを利用しているのですが、最近新しいサービスが始まりまして、乗換えキャンペーンをやっています。で、無料のお試しをしてみたのですが、充実していました。現状のサーバではperl5.00503とruby1.81が使えたのですが、さらにPerl5.8.4、php、pythonが使えて、MySQLも利用できるようです(この辺はサービスプランによります)。
どうもこの新しいサービスは、日記やblogをターゲットにしているみたいで、最初から設定でtDiaryがインストールできるようになっていたり、PerlモジュールではGDやCrypt::DSA、Crypt::Rnadom(当然Math::Pariも!)、さらにXML::LibXMLなど、Movable Typeなどのblogツール用に適したものが結構インストールされています。pureperl版をつくった苦労は……
あと最近知ったのですが、今使っているサーバでもsshやcronが利用できたんですね(新しいサービスでは正式に対応しているみたい)。