タグ

ブックマーク / naoya-2.hatenadiary.org (4)

  • リファレンスの循環参照によるメモリリークを Scalar::Util::weaken で解決する - naoyaのはてなダイアリー

    Perl のガベージコレクション(GC)の実装にはリファレンスカウント方式のGCが採用されています。リファレンスカウントというのは、あるデータ構造やオブジェクトがあった際、それらを参照するリファレンスの数を内部で換算して、その数が 0 になったらメモリから実体を破棄するという仕組みです。(JavaRubyなどの他言語のGC方式については 'PerlJavaRuby における GC アルゴリズム' あたりを。) リファレンスカウント式GCは、仕組みがシンプルで分かりやすい利点を持つ反面、相互参照が原因で参照を切ることができずにオブジェクトが解放されず、結果メモリリークを引き起す場合があるという欠点も持っています。 このメモリリークはバッチスクリプトや CGI のように、一度の実行で Perl のプロセスそのものが終了するプログラムではあまり問題になりませんが、デーモンプログラム、あるい

    elecsta
    elecsta 2010/05/29
    perl memo debug wiz
  • Perl のリスト操作を Ruby 風に - naoyaのはてなダイアリー

    Perl の言語組み込みのリスト操作は関数形式で、push(@array, 1, 2) のような記述になります。一つのリストに対して複数の操作をしたい場合などは、関数呼び出しを複数行にわたって書いていくことになり、少々面倒です。しかし Perl は、Perl のリスト実装である配列のリファレンスに bless してメソッドを定義したクラスを作ることができます。この独自に定義したクラスにプリミティブな操作を加えていって、Ruby のように連続したメソッドの呼び出しによるリスト操作を実現することが可能です。 ここでは List::RubyLike という配列クラスを作成します。まずは手始めに配列に bless して、size() メソッドが呼び出せるようにします。以下のようになります。 package List::RubyLike; use strict; use warnings; sub

    Perl のリスト操作を Ruby 風に - naoyaのはてなダイアリー
    elecsta
    elecsta 2010/05/07
    perl ruby blackmagick
  • YAPC::Asia 2009 1日目 「Perlで圧縮」の資料 - naoyaのはてなダイアリー

    1日目の発表を終えました。資料を公開します。 Perlで圧縮View more presentations from Naoya Ito. 発表の方は少し駆け足になってしまいました。明日ははてなブックマークのシステム事例の話をしたいと思います。 発表の様子 via: http://yapcasia2009.ficia.com/

  • Unicode::RecursiveDowngrade - naoyaのはてなダイアリー

    UTF-8 フラグがどうもウザいという人向けにこんな CPAN モジュールがあるそうな。 「あるそうな」というか作ったのあなたでしょと軽くツッコミつつ、これはいいものです。Perl 5.8 における悩ましい問題であるところの UTF-8 フラグを、データ構造を再帰的に下って全部 off にしてくれるモジュールです。 http://search.cpan.org/dist/Unicode-RecursiveDowngrade/ なにげにフラグを落とす処理を pack('C0A*', shift)と pack な魔法でやってるところも素敵。Encode や unicode を必要としないので Perl 5.6 とかでも使えます。pack な方法はおそらく竹迫さんのパワポから得たヒントかな。 これまで、TT で utf8off なんてフィルタを書いて [% item.title | utf8of

    Unicode::RecursiveDowngrade - naoyaのはてなダイアリー
  • 1