Class::Accessor::Fastを触ってみる

2009年1月 7日
| コメント(0) | トラックバック(0) Class::Accessor::Fastを触ってみる

NANOChatのMENTA化がなかなかうまくいかない。
なんというか、グローバル変数が多いのでスクリプトがわかりづらいです。
誰だ?こんなスクリプト書いたのは?

ということで、またまた気分転換に。
MENTAの標準添付モジュールを触ってみるコーナー。
第一弾はClass::Accessor::Fastです。

これだけで簡単にOOPな気分が味わえますね。
値の出し入れができるアクセサーを提供してくれます。
今回の例では「Point」というクラスに「x」と「y」というアクセサーを作った事になります。

参考
MENTA標準添付モジュールについて - MENTA
Class::Accessor::Fast - Faster, but less expandable, accessors - search.cpan.org


あと、MENTAは関係ありませんが、面白そうだったので「B::Deparse」を試してみました。
Perlがどのように解釈しているかを表示してくれるのは、なかなかためになります。

参考
404 Blog Not Found:perl - B::Deparse

point.pl

#utf8
use strict;
use warnings;
use utf8;
use Data::Dumper; sub p ($) { print Data::Dumper::Dumper(shift); }
 
package Point;
use base qw/Class::Accessor::Fast/;
__PACKAGE__->mk_accessors(qw/x y/);
 
package main;
 
my $p = Point->new;
p $p;
 
$p->x(128);
$p->y(256);
eval { $p->z(32); };
warn $@ if $@;
 
p $p->x;
p $p->y;
p $p;

実行結果

Can't locate object method "z" via package "Point" at D:\devel\test\point.pl line 18.
$VAR1 = bless( {}, 'Point' );
$VAR1 = 128;
$VAR1 = 256;
$VAR1 = bless( {
                 'y' => 256,
                 'x' => 128
               }, 'Point' );


perl -MO=Deparse point.pl

use utf8;
use Data::Dumper;
sub p ($) {
    use warnings;
    use strict 'refs';
    print Data::Dumper::Dumper(shift @_);
}
package Point;
sub BEGIN {
    use warnings;
    use strict 'refs';
    require base;
    do {
        'base'->import('Class::Accessor::Fast')
    };
}
use warnings;
use strict 'refs';
'Point'->mk_accessors('x', 'y');
package main;
my $p = 'Point'->new;
p $p;
$p->x(128);
$p->y(256);
eval {
    do {
        $p->z(32)
    }
};
warn $@ if $@;
p($p->x);
p($p->y);
p $p;

トラックバック(0)

このブログ記事に対するトラックバックURL:

コメントする

Google検索

Last.fm

このブログ記事について

このページは、のぶりんが2009年1月 7日 01:45に書いたブログ記事です。

ひとつ前のブログ記事は「最近聴いた曲の歌詞が見れるサイト「LastLyrics 」」です。

次のブログ記事は「Desktop Tower Defenseが面白い」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログのライセンスは クリエイティブ・コモンズライセンス.
Powered by Movable Type