トップ «前の日記(■2006-05-02) 最新 次の日記(■2006-07-01)» 編集

どんぞこ日誌

2003|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|07|08|12|
2007|01|04|08|12|
2008|01|02|03|04|06|07|08|10|11|12|
2009|01|02|04|05|06|07|08|09|11|12|
2010|01|03|04|07|08|10|11|12|
2011|01|02|03|04|05|06|07|08|10|12|
2012|01|02|03|05|06|07|08|09|10|
2013|01|02|07|08|09|
2014|08|09|
2015|08|
2016|06|07|12|
2017|01|03|08|
2018|03|
2022|03|
2023|03|
2024|02|07|10|

同人関連(どんぞこ楽屋) | 旧い雑文   


■2006-05-15

* [近況] 雨が多くてB!

 大変イライラします。

 今月のAcmeを2月から4ヶ月分書こうとしましたが、挫折。

* [Perl] threadsの新機能B!

  スタックサイズを設定できるようになったりと色々機能強化されているCPAN版threadsにkillメソッドが追加されて、個別スレッドに擬似的にシグナルを送れるように。

 $thr->kill('STOP');
 # $SIG{STOP}ハンドラが呼び出される

 ところでThread::Stateでpthread実装のithreadsでもプライオリティを変更できるようにする実験をしていたらエライめにあったので、やっぱり無茶はやめようと思いました。

* [Perl][メモ] 汚れUNIVERSALB!

  弾さんのwhichをUNIVERSALに入れた理由は?を拝見したのですが、私はfibisさんの感じ方に近いなあ。UNIVERSAL-which reviewsでAdam Kennedyさんのとか。……そうだ、もう「名前空間が汚れた!」と思ったら、とっととおさらばできるようにしておいたらどうかしら?

 use Symbol::Glob;
 
 sub goodbye {
   my ($proto, $method) = @_;
   my $class;
 
   if (@_ == 0) {
     die "use goodbye() with 1 or 2 args";
   }
 
   $class = ref $proto ? ref($proto) : $proto;
 
   if (defined $method and length $method) {
     my $glob
        = Symbol::Glob->new({name=>$class.'::'.$method});
      $glob->delete('sub');
      return;
   }
 
   no strict 'refs';
   for my $name (keys %{"$class\::"}) {
     next if ($name =~ /^[_A-Z]+$/);
     next if ($name =~ /::$/);
     my $glob
       = Symbol::Glob->new({name=>$class.'::'.$name});
     $glob->delete('sub');
   }
}

 クラスとメソッド名を渡せば該当のものをシンボルテーブルから削除。メソッド名を渡さなければ既存のシンボルテーブルにあるものを全部削除。うーん、せっかくだからどこからでも呼べるようにして……

 use UNIVERSAL::isa;
 use UNIVERSAL::can;
 use UNIVERSAL::which;
 use UNIVERSAL::goodbye;
 use Foo;
 
 my $foo = new Foo;
 
 # いらないメソッドよ、さようなら
 $foo->goodbye('meaningless');
 
 # 汚れたUNIVERSALメソッドよ
 # さようなら〜
 UNIVERSAL->goodbye;
 
 $foo->which('hoge'); # Error
 
 # isaやcanは再実装してね

  実にどうでもいいことですが、Acme::Scripticideにはgood_bye_cruel_world()というのがあります。

[]