デリファレンスのオーバーロード
Catalyst のぷらぎんかいてて overload もデリファレンスとかでつかうならいいかなとか思った。
普通の演算子のオーバーロードは C++ とかだとかっけーんだけど、Perl でやるとうまく使わない限りなんか微妙で好きじゃなかったんだけど。デリファレンスのそれは結構なかなかかも。
#!/usr/bin/perl
use strict;
package OverloadTest;
use overload (
q{""} => sub { shift->{text} },
'${}' => sub { shift->{scalar} },
'@{}' => sub { shift->{array} },
'&{}' => sub { shift->{function} },
);
sub new {
my $self = bless {}, shift;
$self->{text} = 'fooooooooo';
$self->{scalar} = \'heh ;)';
$self->{array} = [qw/blah blah blahhh/];
$self->{function} = sub { "bar!!!!" };
$self;
}
package main;
use Data::Dumper;
my $ol = OverloadTest->new;
print Dumper "$ol";
print Dumper $$ol;
print Dumper &$ol;
print Dumper [ @$ol ];
こんなの。String参照とデリファレンスのオーバーロード。
wantarray みたいな用途に使えそう。
ちなみに上のの出力は
$VAR1 = 'fooooooooo';
$VAR1 = 'heh ;)';
$VAR1 = 'bar!!!!';
$VAR1 = [
'blah',
'blah',
'blahhh'
];
こうなる。
XML::Simpleのあれ
って常識だとおもってたんですけど!!
cpan-upload
めちゃ便利!
MIME::Lite::TT::HTML::Japanese
horiuchi さんの MIME::Lite::TT::Japanese を改造というか参考というかして、おんなじ様な感じで HTML メール作れるやつを作った。
遅レスにまじれす
Rails びいきの Catalyst ファースト・インプレッション にこっそりコメントしてみる。
開発スピードがめっちゃ速い
なんつっても開発者がにーt
非互換あるし。lib/appname/C/ -> lib/appname/Controller/ とか。
C → Controller てのは Helper で生成されるデフォルトのものが変わっただけで、今も昔もどちらの名前でもちゃんと使える。
-short
オプションつければ従来どおり。
5.33 → 5.5 は Catalyst 本体内部をいじってるようなプログラム以外のアプリであれば問題なくそのまま動く。
人柱感
まだまだ開発者がすさまじくアクティブなので仕様がかわりまくるというのがありますね
なんでスクリプトに appname が全部ついているんだろう? だるー。いらんだろ。
make install したとき用です。でも正直やるやついねーので微妙です。
このへんはもう少し話し合うべき。Catalystアプリのインストールと配布方法について。(今のMakefileはひどすぎる)
root以下云々
ファイル名を省略するようなプラグインもあるし、暗黙の了解とかもないよ。好きなように使うよ。
URI とファイルパス・関数名が連動してない。
これも人それぞれですよね。連動さすこともできるし、全部1パッケージに収めることもできるし。
そんな感じで。
Rails びいきっていうわりにあんまりたたいてない!
perldoc perllocal
モジュールのインストール履歴表示。
Module::Build
colinux (sid) では普通に使えてるが自鯖 (sarge) だと make distmeta が通らない。
追おうかと思ったけど、Developer Release 使ったら動いたからいいや。
つかもー5時かよ、やべー。
複数dc:subject
はてなブックマークみたいな dc:subject が複数ある RSS は XML::Feed とか XML::RSS じゃうまくパースできないので超ハックしてみた。
while ($rss =~ s!<dc:subject>(.*?)</dc:subject>\s*<dc:subject>(.*?)</dc:subject>!<dc:subject>$1, $2</dc:subject>!gs) { }
とかしてから渡す(ぉ
かっこよすぎ。もっとうまい書き方ないのかな。
でもいまさら RSS パーサーとかかくのめんどいしね。XML::Simple ですらめんどい。