perl 属性 自定义

从使用Attribute::Handlers模块开始。
use strict;
use warnings;

use Attribute::Handlers;

sub Loud : ATTR {
    my ($pack, $ref, $code) = @_;
    no warnings 'redefine';
    my $name = *{$ref}{NAME};
    *$ref = sub {
        print "$name begin\n";
        &$code;
        print "$name end\n";
    }
}

sub foo : Loud {
    print "foo working\n";
}

foo;


可以看出用sub attrname : ATTR { } 声明一个属性,然后即可以把这个属性附加在别的变量上了。Loud属性在应用此属性的方法体的前后各加一句调试信息。

属性处理函数通过参数得到环境信息(即属性被用在什么地方哪个变量上),具体参数定义可参考模块文档。