タグ

ブックマーク / gfx.hatenadiary.org (3)

  • Perlの m// は中身が固定文字列だと爆速になる - Islands in the byte stream (legacy)

    [追記] 実際に検証してみると、パターンが短いと index() のほう速いこともあるようです。パターンが長いと正規表現のほうが高速になるのでそもそもアルゴリズムが違うようですね。 よってこのエントリの内容は必ずしも正確ではありません! cf. https://gist.github.com/kazuho/5410635 [/追記] Perlの話題を日語で – Lingr で出た話題です。 Perlの正規表現マッチはパターンが単純だと index() とおなじく Boyer-Moorアルゴリズムで検索するので非常に高速です。要は最適化のつもりでパターンマッチをindex()に書き換えるのは無意味なのです。 ソースは pp.c や regexec.c あたりを fbm_instr() で検索かな? ドキュメントもどこかで読んだ気がするのですが思い出せず>< perl -MDevel::Pe

    Perlの m// は中身が固定文字列だと爆速になる - Islands in the byte stream (legacy)
    rosiro
    rosiro 2013/04/18
  • Xslate+Locale::Maketext::Lexiconを考える - Islands in the byte stream (legacy)

    前提:Locale::Maketext::Lexicon を Xslate でつかう (by tokuhirom) L::M::SimpleよりもL::M::Lexiconのほうが使いやすいというのはそのとおりなんですが、うまく使うにはもうちょい工夫が必要かなと。 具体的には以下のようなことに対応したいです。 *.poに書く値はHTMLタグが含まれるかも知れない。つまり「raw文字列」とみなすべき。 一方maketext($fmt, @args)の@argsはユーザー入力なのでエスケープしないとまずい 最終的にmaketextはraw文字列を返すべき これを反映させ、二つの関数を用意するのがいいのではないかと考えました。まずl()は普通の関数として動作するので入力値が最終的にエスケープされます。l_raw()は特殊バージョンで、@argsをエスケープし、raw文字列を返します。このl_ra

    Xslate+Locale::Maketext::Lexiconを考える - Islands in the byte stream (legacy)
  • Idea of Data::Validator - Islands in the byte stream (legacy)

    Smart::Argsは無駄がなくて使いやすいのですが、欠点はXSモジュール(PadWalker)への依存があることと、Perlの作法を完全に無視していることです。 そこで、試みにData::Validatorというモジュールを書いてみました。 https://github.com/gfx/p5-Data-Validator コンセプトは以下の通り: 機能的にはSmart::Args + X Pure Perlでも動く Perlの作法に則る 十分に速い 使い方は以下の通り #!perl -w use 5.010_00; use strict; use Data::Validator; sub request { state $rule = Data::Validator->new( url => { isa => 'Str', xor => [qw(schema host path_que

    Idea of Data::Validator - Islands in the byte stream (legacy)
    rosiro
    rosiro 2010/11/12
  • 1