1$DB::single = 1; 2 3package Demo; 4$VERSION = '1.00'; 5use Attribute::Handlers; 6no warnings 'redefine'; 7 8sub Demo : ATTR(SCALAR) { 9 my ($package, $symbol, $referent, $attr, $data, $phase) = @_; 10 $data = '<undef>' unless defined $data; 11 print STDERR 'Scalar $', *{$symbol}{NAME}, 12 " ($referent) was ascribed ${attr}\n", 13 "with data ($data)\nin phase $phase\n"; 14}; 15 16sub This : ATTR(SCALAR) { 17 print STDERR "This at ", 18 join(":", map { defined() ? $_ : "" } caller(1)), 19 "\n"; 20} 21 22sub Demo : ATTR(HASH) { 23 my ($package, $symbol, $referent, $attr, $data) = @_; 24 $data = '<undef>' unless defined $data; 25 print STDERR 'Hash %', *{$symbol}{NAME}, 26 " ($referent) was ascribed ${attr} with data ($data)\n"; 27}; 28 29sub Demo : ATTR(CODE) { 30 my ($package, $symbol, $referent, $attr, $data) = @_; 31 $data = '<undef>' unless defined $data; 32 print STDERR 'Sub &', *{$symbol}{NAME}, 33 " ($referent) was ascribed ${attr} with data ($data)\n"; 34}; 35 36sub Multi : ATTR { 37 my ($package, $symbol, $referent, $attr, $data) = @_; 38 $data = '<undef>' unless defined $data; 39 print STDERR ref($referent), ' ', *{$symbol}{NAME}, 40 " ($referent) was ascribed ${attr} with data ($data)\n"; 41}; 42 43sub ExplMulti : ATTR(ANY) { 44 my ($package, $symbol, $referent, $attr, $data) = @_; 45 $data = '<undef>' unless defined $data; 46 print STDERR ref($referent), ' ', *{$symbol}{NAME}, 47 " ($referent) was ascribed ${attr} with data ($data)\n"; 48}; 49 501; 51