summaryrefslogtreecommitdiff
path: root/lib/Attribute/Handlers/demo/Demo.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Attribute/Handlers/demo/Demo.pm')
-rwxr-xr-xlib/Attribute/Handlers/demo/Demo.pm49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/Attribute/Handlers/demo/Demo.pm b/lib/Attribute/Handlers/demo/Demo.pm
new file mode 100755
index 0000000000..d82693574b
--- /dev/null
+++ b/lib/Attribute/Handlers/demo/Demo.pm
@@ -0,0 +1,49 @@
+$DB::single = 1;
+
+package Demo;
+use Attribute::Handlers;
+no warnings 'redefine';
+
+sub Demo : ATTR(SCALAR) {
+ my ($package, $symbol, $referent, $attr, $data, $phase) = @_;
+ $data = '<undef>' unless defined $data;
+ print STDERR 'Scalar $', *{$symbol}{NAME},
+ " ($referent) was ascribed ${attr}\n",
+ "with data ($data)\nin phase $phase\n";
+};
+
+sub This : ATTR(SCALAR) {
+ print STDERR "This at ",
+ join(":", map { defined() ? $_ : "" } caller(1)),
+ "\n";
+}
+
+sub Demo : ATTR(HASH) {
+ my ($package, $symbol, $referent, $attr, $data) = @_;
+ $data = '<undef>' unless defined $data;
+ print STDERR 'Hash %', *{$symbol}{NAME},
+ " ($referent) was ascribed ${attr} with data ($data)\n";
+};
+
+sub Demo : ATTR(CODE) {
+ my ($package, $symbol, $referent, $attr, $data) = @_;
+ $data = '<undef>' unless defined $data;
+ print STDERR 'Sub &', *{$symbol}{NAME},
+ " ($referent) was ascribed ${attr} with data ($data)\n";
+};
+
+sub Multi : ATTR {
+ my ($package, $symbol, $referent, $attr, $data) = @_;
+ $data = '<undef>' unless defined $data;
+ print STDERR ref($referent), ' ', *{$symbol}{NAME},
+ " ($referent) was ascribed ${attr} with data ($data)\n";
+};
+
+sub ExplMulti : ATTR(ANY) {
+ my ($package, $symbol, $referent, $attr, $data) = @_;
+ $data = '<undef>' unless defined $data;
+ print STDERR ref($referent), ' ', *{$symbol}{NAME},
+ " ($referent) was ascribed ${attr} with data ($data)\n";
+};
+
+1;