perl

Text::ASCIITableによるアスキーテーブルレイアウト

MySQLの出力結果みたいなのが必要になったのでCPAN漁ってたらこんなの発見。Text::ASCIITable - Create a nice formatted table using ASCII characters. - metacpan.org地味に凄いめちゃ便利 use Text::ASCIITable; my @rows = ( [1,'foo','2011-03-16 11:2…

Class::Accessor::Fastが破壊的だったと初めて知ったあの日

事の発端はぽけーっとはてブのお気に入りを見ていたらClass::Accessor::Liteの記事が目に付いた事でした。お、新しいモジュールか?と思いさっそく実装を拝見させてもらったわけです。なるほどなるほど、超が付くほどの超シンプル。超々シンプル。実際問題Cl…

sprintfで使用する引数を直指定する方法

久々にPerl。いや、ほんと久しぶりよね。 printf '%d年%d月%d日', 2010, 12, 22; # 2010年12月22日 上記のような処理の時に、引数の数は変更せずに年を削って「12月22日」と表示したい場合、以下のようにすれば可能。 printf '%2$d月%3$d日', 2010, 12, 22; …

List::MoreUtilsのuniq関数の実装が変わってた件

大分昔に書いたHashを使って配列をユニークにしようという記事のブコメにてList::MoreUtilsのuniq関数の実装が変わったというコメントを頂きました。 List::MoreUtils 0.25_02 では少々変更されていた。 http://cpansearch.perl.org/src/VPARSEVAL/List-More…

PHP初心者でも簡単にPerlに移行するための妙妙案

PHPが何で扱いやすいかわかったよ!PHPタグに真理があったんだよ! <html> <body> 僕の名前はです。 年齢は歳です。 </body> </html> これだけで動くんだもんそりゃ便利だし分かりやすいよ。なのでPerlでもPHPタグ使えるようにしてみました。 package PHP::Block; use strict; use war…

ちょっとしたコードを検証するコツ

とりあえずPerl限定のお話で。まぁ皆同じようなことは多分してると思うのでぐだぐだと何か言うことも無いんだけど、自分流のやり方を覚書程度にメモするという意味でここに残しておきます。まず以下のようなfoo.plを用意します。 #!/usr/local/bin/perl -w u…

C::P::Session::State::URI×HTML::Entitiesで文字化け

とりあえずググルと以下のような記事が。 しかし、それもコードが冗長になるので、以下の方法で対応しました。MyApp.pm %HTML::Entities::char2entity = ( '&' => '&amp;' , # ampersand '>' => '&gt;' , # greater than '<' => '&lt;' , # less than '"' =>…

Path::Class-0.17

Path::Classが約2年半ぶりくらいにバージョンアップされました。Path-Class-0.17 - Cross-platform path specification manipulation - metacpan.orgいくつかのバグ修正や最適化が行われたようです。そして!!!先日僕が指摘したPath::Class::Dir-0.16のchi…

Perlにおける定数宣言(constant or Readonly or Attribute::Constant)

正直言いますと、個人的には定数って殆ど使わないんですよね。昔はちょこちょこ使ってたんですが、最近は定数となりうる物は基本的にYAML等外部ファイルに持たせて変更可能にすることが多いのでまったく使ってません。ですがそれでもPerlで定数を使いたい時…

複雑なデータ構造はData::Visitor::Callbackで簡単一発変換

ハッシュと配列の参照が入り交じったような複雑なデータ構造の、全value を均等に加工したかったので次の様にしてみました。(中略)すでに似たモジュールがある気が激しくしています!ご存知でしたらぜひ教えてくださいませ。 [perl] 複雑なデータ構造のvalue…

携帯動画の再生時間をMP4::Infoで取得しませう

…というか3gpファイルのヘッダを解析して再生時間の取得を試みるわけなので延いてはmp4の解析ということになりますが故、結局のところMP4::Infoを使うことで万事OKだろっていう話ですね。 use MP4::Info; # v1.12 use Path::Class; my $file = file '/foo/ba…

Path::Class::Dir-0.16のchildrenが「0」で止まる件

ブログにお絵かきなんてものが増えてたので喜び勇んで描いてみた。って前からあったっけ?タイトルまんまなんだけども、children呼ぶときの対象のディレクトリ以下に「0」って言う名前のファイル(もしくはディレクトリ)が存在してるとディレクトリ一覧が取…

複数同時にlocal化したいばやい

あけましておめでとうございます、ってもう2月かよ!今日は物凄くどうでも良くて、凄まじく応用範囲の狭い小ネタでも提供します。 %SIGに同じ関数登録しようとして、 local $SIG{$_} = sub {...} for qw/INT TERM ALRM .../; みたいなことをしたんだが。うま…

さっきの記事のShikaのベンチのコード

モジュールがMoose依存してた。別れたい… - Unknown::Programmingid:tokuhiromさんにベンチうp頼まれたんだけども超個人的なBenchmarkコードなのでそのままCodeReposにあげれるような代物でもないということもあり取り急ぎエントリとしてあげておきますので…

モジュールがMoose依存してた。別れたい…

さて毎年年末が近づくとブログ更新頻度が下がるid:fbisですが、Mooseも馴染んできたところなのでそろそろMooseに対して一言いっておくかということでね、はい。Mooseは素晴らしい。とてもベリー素晴らしい。何より人に優しい。人間に優しい。がっ!しかし、M…

DBD::mysqlのmysql_auto_reconnectが真だとDB再接続時にDBICのon_connect_doが実行されない件

ハマったメモ。さてまた今回も若干適当な記事だけども、メモということでお許し願いたい。ってか誰も言及してないっぽいんだけどもしかしてこの現象うちだけ?とにかくタイトルの通りで、検証時の各モジュールのVERSIONは以下の通り。 DBD::mysql-v4.005 DBI…

Perl Quizで遊んでみる

Perl Quiz - package名について - Islands in the byte stream #!perl -w use strict; use Test::More 'no_plan'; sub f{ package main::Foo; } f(); is ref(bless({}, 'Foo')), 'Foo'; とか #!perl -w use strict; use Test::More 'no_plan'; sub f{ packag…

今週末の予定

希望 use fbis; use Beer::PremiumMalts; my $fbis = fbis->new; $fbis->drink(Beer::PremiumMalts->new( type => 'big' )) while $fbis->stomach; $fbis->say->say->say->say; $fbis->sleep(60 * 60 * 12); 現実 use fbis; use Work::Mobile::WebApp; my $f…

Perlのinstanceof演算子のベストプラクティスは何か

instanceof演算子 - Islands in the byte stream確かに遅いですよねぇ。ただ、一応ベンチとってみたところ、blessed使うのが一番早かったです。以下、$xがオブジェクトの場合のベンチ。 use Benchmark qw(cmpthese timethese :hireswallclock); my $x = bles…

Catalyst+mod_perl2+DBIC(DBD::mysql-v4.008)でSegmentation fault

なんか良く分からんけどSegmentation faultが出て泣きそうだったんだけどやっと原因がわかったっぽい感じなのでメモしとく。とりあえず環境は下記 CentOS 5.2 Apache 2.2.9 Perl v5.8.8 mod_perl 2.0.4 MySQL 5.0.51b 現象としてはサイトを数時間放置してア…

Catalyst::Model::なんとかAdaptor系の話

Catalyst::Model::MultiAdaptorでlifecyle support - dann's blog - # やりたいことがいつの間にかできていた - 僕ト云フ事@はてな出張版この辺の記事を見てて思ったこと。Catalyst::Model::Adaptorは便利だけど、モジュールの数だけモデル化用のファイルが…

hasの定義を取得する

hasで定義したメソッドのオーバーライドについて - Unknown::Programmingの続きというか。さて、先日の記事でhasで宣言する時にアクセサの先頭に+をつければ特定のものだけを上書きできることを知ったのですが、そんな便利なものがあるとは知らずに(MooseのP…

hasで定義したメソッドのオーバーライドについて

defaultだけ上書きとかできないのかな? package Foo; use Moose; has foo => ( is => 'rw', lazy => 1, default => sub { 100 } ); package Bar; use Moose; extends qw(Foo); # isとlazyを引き継いで欲しい! has foo => ( default => sub { 200 } ); 派生…

lazyなdefault再呼び出し

metaクラスからたどって直接呼び出した方がわかりやすいんではないかと思ったりしました。 package Foo; use Moose; has hoge => ( is => 'rw', lazy => 1, default => sub { 100 }, ); __PACKAGE__->meta->make_immutable; 1; package main; use strict; us…

Moose使ってると初期処理って殆どいらんねって思えてきた

Moose使い始めの頃はBUILD用意してそこで初期処理してたんだけど、慣れてくるとhasのlazyとdefaultでその殆どを賄える事に気付いた。よくよく考えたら初期処理って引数のハッシュを解析してそのキー毎に特殊な処理をさせるだけが多いのでhasで定義しとけばそ…

Mooseでdefaultをもう一度呼ばせる方法

package Foo; use Moose; has aaa => ( is => 'rw', lazy => 1, default => sub { 100 }, ); no Moose; __PACKAGE__->meta->make_immutable; 1; package main; use Perl6::Say; use Foo; my $foo = Foo->new; say $foo->aaa; # 100 delete $foo->{aaa}; # de…

MooseにDBIx::Class型を用意したいとか。

DBIx::Class型というかsearch等で取ってきたDBIx::Class::Rowと言えばいいのかな。雰囲気としてはこんな感じの package Foo; use Moose; use Moose::Util::TypeConstraints; use MySchema; my $schema = MySchema->connection($info); class_type 'MySchema:…

localが何をするものかイマイチわからん

ということを言われたので、ふむ確かに最初はわからないだろうなと思い、ここに記録する。まず、ある学生さんの名言にこんなのがある。 お前は1枚のCDを聞き終わったら、キチッとケースにしまってから次のCDを聞くだろう?誰だってそーする。俺もそーする …

Path::Classでディレクトリを再帰的に生成

話変わってほら、なんというかディレクトリを再帰的に生成したいとかって欲求、たまにあるじゃない。いつも忘れるのよいつも。なんだったっけなーってな感じで。でね「Perl ディレクトリ 再帰的」とかでググってもイマイチ目的に合ったものがヒットしなかっ…

Mooseのwithってクラス名を省略できないのかな?

ちょっとした疑問。Mooseでwithするときに、例えば package MyClass; use Moose; with qw{ FooFooFoo::BarBarBar::BazBazBaz::Role::Base FooFooFoo::BarBarBar::BazBazBaz::Role::Hoge FooFooFoo::BarBarBar::BazBazBaz::Role::Muge FooFooFoo::BarBarBar::…