トップ «前の日記(■2005-09-04) 最新 次の日記(■2005-09-12)» 編集

どんぞこ日誌

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|

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


■2005-09-09

* [Perl][メモ] 楽々?アクセサ作成B!

 Perl で楽々アクセサ作成について考えてみたで、可能な限り簡単に$obj->author->nameを実現しようとClass::Accessor::Linkedを書いてみました。author以下のデータにアクセスするために、ハッシュリファレンスをAUTOLOAD可能なオブジェクトにすることで矢印を連結しています。
   というわけで効率は悪いし、最初にデータ構造を用意しておかないと深いところのデータが利用できないなど問題が多々があり、実用性はありません。あくまでも$obj->author->nameを実現してみたかったということで。
  本当はちゃんとデータ構造を反映したaccessorを生成してあげないといけないのですが、お昼休みではそこまでできませんでした。

* [Perl][メモ] autobox::PropHashB!

  Class::Accessor::Linkedは多少なりともお役に立ったようです(Perlで楽々アクセサ作成〜その2)。 良かったよかった(山科さんのコードはperl5.8.3未満でクラッシュするとありますが、perl本体というよりTest::*系の問題っぽいですね)。
  さて、せっかくですので、autoboxを使ってハッシュリファレンスも同様にしてしまいましょう。ということで書いたのがautobox::PropHashです。えらくあっさりしたコードですが。 autoboxautobox::Coreが必要です(ただしautobox::Coreは便利なメソッドが使えるように継承しているだけ)。

 use autobox;
 use autobox::PropHash;
 
 my $obj = {a => {b => 'c'}};
 print $obj->a->b;
 
 $obj->a->b = 'foo!';
 print $obj->a->b;
 
 $obj = {};
 $obj->a = 1;
 print $obj->a;
 
 $obj->b = [qw/foo bar hoge/];
 print $obj->b->join(',');    # foo,bar,hoge
 print $obj->keys->join(','); # a,b

  AUTOLOADlvalueを使うことで $obj->a->b = 'foo!' なところが粋だと思いませんか? 思いませんか。そうですか。

[]