Syntax highlighting for the Perl debugger
https://github.com/Ovid/DB--Color
It's a nice idea! But running is very slow :(
hmm... Syntax::Highlight::Engine::Kate is evil slow?
Cache::Memcached::Fast の weight をでかくすると地球がやばい
Cache::Memcached::Fast はデフォルトで consistent hashing してくれる。で、servers に weight を渡すと振り分けの重み付けをしてくれるわけだが、これを ketama_points に大きな値を指定し、かつ 100 とかにして new したら死ぬほど遅くなった。
とある環境でいきなりインスタンス生成がクソ遅くなって、なかなか原因がわからなくて超ハマったのでメモ。
考えてみれば ketama るので、超巨大な配列が内部で作られるから当然っちゃ当然。
デフォルトは ketama_points => 0 だけど、普通 200〜300 位を指定しているはず。
use strict; use warnings; use Benchmark qw(cmpthese); use Cache::Memcached::Fast; cmpthese 100 => { 'little' => sub { Cache::Memcached::Fast->new({ servers => [ { address => 'zigorou', weight => 1.0 }, { address => 'nekokak', weight => 1.0 }, ], ketama_points => 300, }); }, 'big' => sub { Cache::Memcached::Fast->new({ servers => [ { address => 'zigorou', weight => 100 }, { address => 'nekokak', weight => 100 }, ], ketama_points => 300, }); }, }, 'all';
big の方は終わらない。
local $@ ちゃんの 5.14 での挙動
以下のようなコードが 5.14 からちゃんと die するようになっているっぽい。しらなんだ。
それ以前だと、エラーが握りつぶされて僕らが死ぬ。
use strict; use warnings; sub foo { local $@; eval { die "oops!" }; die $@ if $@; } sub bar { local $@; eval { foo() }; die $@ if $@; } bar();
Dist::Zilla を初めて触って思ったこと
やめといたほうがいい
coderef から名前を取りたいとき
coderef から名前を取りたいなーって時がごく稀にあるわけですが、そういうときにどうするかという話。
anon のやつは __ANON__ になる。
perl 5.12.0 からは B でとれるけど、それ以前の場合は使えないので、Devel::Peek 使っとけばいいっぽい。気のせいで、むかしから B::svref_2object($coderef)->GV->NAME; できるんですってよ!!
追記: ATTRIBUTE のなかだと動かないので、Attribute::Handler を使うか、Test::Attribute::AutoLevel の 0.03 移行でやってるアプローチを取る必要がある。
use B; use CGI; my $coderef = \&CGI::new; my $funcname = B::svref_2object($coderef)->GV->NAME;
use Devel::Peek; use CGI; my $coderef = \&CGI::new; my ($funcname) = Devel::Peek::CvGV($coderef) =~ /::(.*)$/;
とかなんとか
Class::Accessor::Mouse
http://d.hatena.ne.jp/gfx/20111119/1321681656
http://tokuhirom.hatenablog.com/entry/2011/11/19/152621
use 5.14.0; package Class::Accessor::Mouse { use Mouse; sub import { my ($class, %args) = @_; my $meta = Mouse->init_meta(for_class => scalar caller); for my $type (qw(rw ro wo)) { next unless ref $args{$type} eq 'ARRAY'; $class->_add_attribute($meta, $type, $args{$type}); } $meta->make_immutable(); }; sub _add_attribute { my ($class, $meta, $type, $attrs) = @_; $meta->add_attribute($_, is => $type) for @$attrs; } } package Hoge { Class::Accessor::Mouse->import( rw => [qw/foo bar/], ); } say Hoge->new->foo('bar');
MouseX::Simple の実装のほうが筋がいい
こんにちは
お豆