ブックマーク / blog.64p.org (40)

  • Q. Perl5 のどのバージョンをつかったらいいのですか? - tokuhirom's blog

    5.18.x, 5.16.x, 5.14.x をつかいましょう。 というのがフォーマルな回答です。日時点での Perl5 の最新版は 5.18.0 です。 このあたりのポリシーについては perlpolicyというドキュメントが公式ドキュメントとなっていますのでごらんください。 このブログエントリーでもかいつまんで説明します。 バグフィックス 私たちが「公式に」サポートするのは、最新の安定版とそのひとつ前の安定版のみです。 5.12.x以前のバージョンはもうサポートの対象外です。5.18.0がリリースされたら 「公式に」Perl 5.14.xのサポートを終了します。ただし、後述するセキュリティ アップデートの提供は例外とします。 バグがみつかっても、過去2つのメジャーバージョンにたいしてしかアップデートは提供されません。今でいうと、5.18.x と 5.16.x 以外にたいするバグフィッ

    asakura-t
    asakura-t 2013/06/10
  • Perl 5.18 時代における Core module についての捉え方について - tokuhirom's blog

    Perl 5.20 で、CPANPLUS とその依存モジュールたちが core distribution から分離されます。 また、5.22 では CGI.pm と Module::Build が分離されそうです。 ここにいたり、Perl 5 の core distribution にはいっている、ということの意味が徐々にかわってきつつあります。 では、現在の状況はなぜおきているのかを考えてみましょう。 configure_requires の普及Perl 5.8.5 あたりの時代では、Module::Build などは core distribution にはいっていないと、つらかったわけですが、configure_requires が普及したことにより、インストーラを CPAN shell で自動的にインストールすることができるようになりました。 これにより Module::Build

    asakura-t
    asakura-t 2013/05/30
  • Perl5 で irb 相当のことをする方法、すなわち REPL をする方法 - tokuhirom's blog

    Perl5 で REPL(Read-Eval-Print-Loop)をつかいたければ、perl -de 1 をつかえばいい。 perl5 についているデバッガ機能をつかえば、一応 REPL っぽいことはできるので、以下のようにしてつかう。 % perl -de 1 Loading DB routines from perl5db.pl version 1.33 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(-e:1): 1 DB<1> print 3+2; 5 DB<2> ただしこの場合、lexical 変数が保存されないのでたとえば以下のコードは意図したとおりにはうごかない。 DB<1> my $x =1; DB<2> print $x, "\n"

    asakura-t
    asakura-t 2011/03/01
  • 適当なscriptでは use autodie; する - tokuhirom's blog

    chdirのときもエラー処理は必須ですな〜自分で使うスクリプトだからええ加減な書き方してた〜反省 #ubuntu #perl http://twitter.com/mukumaru/status/20694618336 perl5.10.1 以後では autodie.pm が標準添付されているので、それを利用するとよい。 % perl -E 'use autodie; chdir "/foo"' Can't chdir('/foo'): No such file or directory at -e line 1こんなかんじ。use strict; use warnings; につづけて use autodie; と書くだけ。 使い捨てスクリプトでは use autodie; しておくと、いちいち組み込み関数のエラー処理かかなくていいので便利。

    asakura-t
    asakura-t 2010/08/10
    evalと組み合わせるといいよね。 http://search.cpan.org/dist/autodie-2.10/lib/autodie.pm
  • given-when における method call について - tokuhirom's blog

    use strict; use 5.10.0; { package xai; use constant {cron => 1 }; } given (2) { when (xai->cron) { print "FAIL\n"; } } これは FAIL と出力する。when の中におけるメソッドコールは、その返り値の boolean 値そのものが評価値として利用され、 when ($_ ~~ xai->cron) { } 相当にはならないのだ。 ちょっとはまるかも。

    asakura-t
    asakura-t 2010/07/27
    scalar xai->cron みたいにする必要があるのか。。。あ、それだとARRAYを返す場合はダメか。+xai->cron でいける?
  • Template-Toolkit のよくない点について - tokuhirom's blog

    TT はすばらしいテンプレートエンジンだが、いくつかの点ですぐれていない点がある。その中でもっとも気にくわない2つは以下のもの。 Speedtoo many plugins on cpanとくに速度の遅さは致命的で、キャッシュや、一部の XS 化などによる高速化がはかられてはいるものの、「ボトルネック」になりうるほど遅い。 プラグイン機構は便利だが、一方で、CPAN モジュールへのラッパーモジュールが大量に生成されている。 この2つの欠点は、Text-Xslate の TTerse syntax で解消されているので、こういった点が気にくわない人は、ためしてみるといいのではないかとおもう。 【追記】 なぜ、TT でプラグインが異常に発達するのかというと、関数を export するのがめんどくさいから。で、その欠点は Xslate では Text::Xslate->new(module =>

    asakura-t
    asakura-t 2010/06/08
  • shirokaned - messagepack rpc + kyotocabinet + AnyEvent + Perl による適当な KVS の実装 - tokuhirom's blog

    http://github.com/tokuhirom/shirokaned HTTP でデータを取得できる そして、その httpd を外部にみせても大丈夫インメモリデータベースLRU supportそれなりにはやい 同時1000接続程度で5000QPS程度でればいいかなーmater-master レプリケーションができる想定しているデータサイズは 4KB 程度で、レコード数は100万程度の LRU で OKキャッシュ用途なので、slave と master で一貫性は必要ないし、データの更新も一切ないvalue がなければ、再生成できるかんじってかんじの KVS があったらいいなあとおもった。 のでためしにかいてみた。 要素技術としては AnyEvent::MPRPC(AnyEvent を用いた messagepack rpcperl 実装)daemontools(ロガーをつけた

    asakura-t
    asakura-t 2010/06/01
  • Why I use DBIx::Skinny instead of DBIx::Class. - tokuhirom's blog

    重くなさそうなメソッドが実は重い"->pager" が count 文を勝手に発行しているというのが一番有名な例。 relation はってる場合とかは得にそうなんだけど、内部の実装を意識しないと、つかいものにならないというのはしんどい。 DBICのイテレータをTTにわたしたりとかしたいわけだけど、そういうことすると、デザイナーが勝手に relation の先をよんでたりして、SQL の発行回数がひどいことになったりとかする。 (DBIC のイテレータとかわたすなよ、という話はあるけど) 個人的には、「SQLを発行するメソッドは、SQLを発行しそうな名前であるべき」だとおもう。

    asakura-t
    asakura-t 2010/03/19
    DBICってそんな感じだったのか……。// いや、未だにCDBI 使っててmysql-mmm使った時にフェイルオーバーするプラグインとか書いてたりするんですけどね、ええ。
  • Mouse の起動がはやい理由 - tokuhirom's blog

    http://perl-mongers.org/2010/02/the-fastest-way-to-mastering-moose-and-mouse.html Class::MOP関連の処理を省いていたり、XSで実装されている部分が多かったりするので、Mouseのロード, インスタンスの生成, Mouseクラスに於ける処理の実行時のいずれもMooseより高速に動作します。 ってかいてある。 ロード速度は単に "Moose constructs internal classes at run time" が遅いってのが最大の問題点で、起動時の速度には XS とか MOP less とかはほとんど寄与してない(と俺はおもってる)。 で、実行時の速度については XS が有効にはたらいていて、gfx++ なわけですが、今後 Moose の開発が安定してきたら Moose にフィードバックされる

    asakura-t
    asakura-t 2010/02/19
  • given-when を dispatcher としてつかう場合の注意事項 - tokuhirom's blog

    せっかく given-when 構文をつかえるのだから、以下のように Dispatcher を書けばいいのではないか、という話があったので実際つかってみていたのだが、このような書き方は非常に低速であることがわかった(too slow)。 use 5.010; sub dispatch { my ($class, $c) = @_; given ([$c->request->method, $c->request->path_info]) { when (['GET', '/']) { return call("Root", 'index'); } ... } } 以下のようなベンチマークスクリプトをうごかすと 25倍遅い。 use strict; use warnings; use Benchmark qw/:all/; use 5.010; my $method = "GET"; my

    asakura-t
    asakura-t 2010/02/14
    スマートマッチ(でしたっけ?)が遅いのかな。
  • Plack::Request と Hash::MultiValue の話 - tokuhirom's blog

    HEAD の Plack::Request では Hash::MultiValues が導入されてる。Hash::MultiValue は多値をストアできるハッシュ風オブジェクト。 use Plack::Request; use Test::More; my $r = Plack::Request->new({ QUERY_STRING => 'bar=aaa&bar=bbb', REQUEST_METHOD => 'GET', }); is_deeply $r->parameters->{bar}, [qw/aaa bbb/]; みたいなコードが昔はとおってたけど、HEAD だととおらない。 なんでかというと、Plack::Request->parameters->{...} が str or arrayref をかえすのがよくないからなおしたというはなし(see http://bulk

    asakura-t
    asakura-t 2010/01/29
  • オススメCPANモジュールその1。 AnyEvent - TokuLog 改めB日記

    というわけで、俺の独断と偏見によるオススメモジュールのコーナーです。 AnyEvent は poll/select/kqueue/epoll(4) などのイベントループを抽象化するライブラリです。似たような目的のものとして Danga::Socket, POE などがありますが、ライブラリ全体のインターフェースの完成度や速度などの点から AnyEvent を僕は一番押しています。 Pure Perl で利用できますし、インターフェースも安定しています。まだバリバリ開発されてますが、backward incompat な変更はされないようです。 作者が mlehmann 氏ということで、ドキュメントは丁寧ですが攻撃的な文章が目立ちますし、バグレポートすると異常な長文がかえってきたりするのでうっとーしかったりしますが、コードの品質はたかいので、気にする必要はないかとおもいます。コードの品質の前

    asakura-t
    asakura-t 2010/01/26
  • Amon と Helper と Catalyst と Model の話 - tokuhirom's blog

    Akismet の perl モジュールをさがしてる途中で、Catayst::Model::Akismet ってのをみつけた。昔の Cat はこんなものをいちいち CPAN にあげてたのかー、とおもうとちょっとおもしろい。 このために Catalyst::Helper::Akismet とかわざわざ用意するとか、ありえん。そんなに頻繁につかうわけでもなし、SYNOPSIS をコピペすりゃー、いいレベルだ。 Helper つかってがんばる云々はほぼ毎度つかう ORM/Template Engine ぐらいで十分で、それ以外のものは、ときどきしかつかわないんだから、helper で自動生成するメリットが薄い。メリットがうすいから、まともにメンテされない。まともにメンテされないぐらいなら最初からない方がいいし、そもそもこんなもの真面目にメンテするのは時間の無駄というものだ。 というわけで、最近の

    asakura-t
    asakura-t 2010/01/14
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    asakura-t
    asakura-t 2010/01/06
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    asakura-t
    asakura-t 2009/12/15
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    asakura-t
    asakura-t 2009/07/10
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    asakura-t
    asakura-t 2009/06/29
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    asakura-t
    asakura-t 2009/06/16
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    asakura-t
    asakura-t 2009/04/29
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    asakura-t
    asakura-t 2009/03/09