2011年12月31日
最近書いたPerlモジュールとかパッチとか
12月頭頃は、今年関わった案件を振り返って、共有できそうな部分をコード化したりとかしていた。そういう下回りを整備するような作業は割と好き。
その中で一応公開できそうなやつとかを以下に記す。
Encode::JP::Mobile::UnicodeEmoji
iOS5から絵文字がUnicode絵文字になってたりとかAndroid対応とかでUnicode絵文字対応がちょっと必要になって書いた。
昔はUnicode絵文字とか無かったのでEncode::JP::MobileはUnicode私用領域に絵文字をマッピングする仕様になってますが、Unicode絵文字領域の文字をそのEncode::JP::Mobileの私用領域にマッピングしてしまうという後ろ向きモジュール。
絵文字はEncode::JP::Mobileの私用領域のレンジでDBに保存しているとか言うことも多いので、そういうサービスでスマホにも対応させる場合、Unicode絵文字も同様の対応を取らざるを得ないこともあり、その変換をするためのモジュールです。
一応動きますが、実装は超適当です。ちゃんとしたマッピングを書いているわけではなく、Encode::JP::EmojiとEncode::JP::Mobileの合わせ技で無理やり実現しているという...。Fallbackとかもよく分からなかったんで指定していません!(キリッ
なので、現状githubのみ。
HTTP::MobileAgent::Plugin::SmartPhone
HTTP::MobileAgentにis_iosとかis_smartphoneとかそういうメソッドを生やしたかったので書いた。
これも一応動きますが、正規表現直書き判定でメンテナンス性とかを考えてないので駄目な感じ。なので同様にgithubのみ。
Archer
これはpull req送って取り込んでもらった。
今年初めの方から、このパッチあてて使ってたんだけど、パッチ送ってなかったのは、File::Rsync のバージョンによって出る問題だかと思って深く追ってなかったからなんだけど、File::RsyncのChangelog見てみたら実はそんなこと無かったので、取り込んでもらった次第。
(File::Rsync::(?:err|out)が以前はString返していたのが、Arrayを返すようになったとか想像していたら、もともとArray(?:_ref)?を返していてそんなことはなかった。)
File::Rsync::(?:err|out)はコンテキストに応じてリストかarray_refかを返すようになっている。そうすると、スカラコンテキストだと常に真になってしまうという問題があって(空のarray_refは真)、if () = $rsync->out;
とかやって無理やりリストコンテキストで返すようにしている。カッコ悪い。
Archerは超便利に使わせてもらってるんだけど、情報が少ないし、まだ使いきれてない感があるから、もうちょっと知見を貯めていきたい。
割と弊社では活用されていますが、バラバラに使っていて知見が共有できておりません。
Plugin::ConfirmがPerl5.14では上手く動かない問題なんかもあるから、ちょっと手を入れてみようかな。
ちなみに、ArcherのwatcherがAuthor除くと弊社社員だけで吹いた。