summaryrefslogtreecommitdiff
path: root/lib/Attribute
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2001-12-09 15:20:08 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2001-12-09 15:20:08 +0000
commitc27482a4ae759620db85e55c84e6da0b10b95e5a (patch)
tree14167b3057c9228d5b472b180b701d67bf3a8bd4 /lib/Attribute
parent95f0a2f1ffc68ef908768ec5d39e4102afd28c1e (diff)
downloadperl-c27482a4ae759620db85e55c84e6da0b10b95e5a.tar.gz
Remove Attribute::Handlers, as per Damian's request.
(Because of fixing the my variables to be now handled in run-time, the whole internals of the A::H needs to be rewritten and Damian will not have time for that for months.) p4raw-id: //depot/perl@13544
Diffstat (limited to 'lib/Attribute')
-rw-r--r--lib/Attribute/Handlers/Changes73
-rw-r--r--lib/Attribute/Handlers/README74
-rwxr-xr-xlib/Attribute/Handlers/demo/Demo.pm50
-rwxr-xr-xlib/Attribute/Handlers/demo/Descriptions.pm25
-rwxr-xr-xlib/Attribute/Handlers/demo/MyClass.pm64
-rwxr-xr-xlib/Attribute/Handlers/demo/demo.pl31
-rwxr-xr-xlib/Attribute/Handlers/demo/demo2.pl21
-rwxr-xr-xlib/Attribute/Handlers/demo/demo3.pl16
-rwxr-xr-xlib/Attribute/Handlers/demo/demo4.pl9
-rwxr-xr-xlib/Attribute/Handlers/demo/demo_call.pl11
-rwxr-xr-xlib/Attribute/Handlers/demo/demo_chain.pl27
-rwxr-xr-xlib/Attribute/Handlers/demo/demo_cycle.pl25
-rwxr-xr-xlib/Attribute/Handlers/demo/demo_hashdir.pl9
-rwxr-xr-xlib/Attribute/Handlers/demo/demo_phases.pl18
-rwxr-xr-xlib/Attribute/Handlers/demo/demo_range.pl21
-rwxr-xr-xlib/Attribute/Handlers/demo/demo_rawdata.pl12
-rw-r--r--lib/Attribute/Handlers/t/multi.t131
17 files changed, 0 insertions, 617 deletions
diff --git a/lib/Attribute/Handlers/Changes b/lib/Attribute/Handlers/Changes
deleted file mode 100644
index 1b5e620482..0000000000
--- a/lib/Attribute/Handlers/Changes
+++ /dev/null
@@ -1,73 +0,0 @@
-Revision history for Perl extension Attribute::Handlers
-
-0.50 Sat Apr 21 16:09:31 2001
- - original version;
-
-0.51 Tue May 1 06:33:15 2001
-
- - Fixed fatal file path error in MANIFEST (thanks Marcel and Jost)
-
-
-0.60 Thu May 10 15:46:02 2001
-
- - Added RAWDATA specifier
-
- - Cleaned up documentation (thanks Garrett)
-
- - Added warning for all-lowercase handlers (thanks Garrett)
-
- - Added autotie functionality
-
- - Tweaked handling of anon arrays as attribute args
-
-
-0.61 Thu May 10 16:28:06 2001
-
- - Critical doc patch
-
-
-0.70 Sun Jun 3 07:40:03 2001
-
- - Added __CALLER__ pseudo class for 'autotie'
-
- - Added multi-phasic attribute handlers (thanks Garrett)
-
- - Fixed nasty $SIG{__WARN__}-induced bug
-
- - Cached ref/symbol mapping for better performance and more
- reliable symbol identification under evil typeglob manipulations
-
- - Added option to pass arguments when autotied classes are imported
- (thanks Marcel)
-
- - Fixed bug in handling of lexical SCALAR refs
-
- - Cleaned up interactions with other class hierarchies
- (due to being base class of UNIVERSAL)
-
-
-0.75 Mon Sep 3 09:07:08 2001
-
- - Cleaned up AUTOLOAD
-
- - Numerous bug fixes (thanks Pete)
-
- - Fixed handling of attribute data that includes a newline (thanks Pete)
-
- - Added "autotieref" option (thanks Pete)
-
- - Switched off $DB::single
-
- - Changed licence for inclusion in core distribution
-
- - Fixed 'autotie' for tied classes with multi-level names (thanks Jeff)
-
-
-0.76 Thu Nov 15 06:31:51 2001
-
- - Fixed documentation nit (thanks Rick)
-
- - Improving intuitiveness of autotie mechanism (thanks Marcel)
-
- - Added $VERSION numbrs to demo modules (seems bizarre to me, but
- they're core too now).
diff --git a/lib/Attribute/Handlers/README b/lib/Attribute/Handlers/README
deleted file mode 100644
index c9e067c8e6..0000000000
--- a/lib/Attribute/Handlers/README
+++ /dev/null
@@ -1,74 +0,0 @@
-==============================================================================
- Release of version 0.76 of Attribute::Handlers
-==============================================================================
-
-
-NAME
- Attribute::Handlers - Simpler definition of attribute handlers
-
-DESCRIPTION
- This module, when inherited by a package, allows that package's class to
- define attribute handler subroutines for specific attributes. Variables
- and subroutines subsequently defined in that package, or in packages
- derived from that package may be given attributes with the same names as
- the attribute handler subroutines, which will then be called at the end
- of the compilation phase (i.e. in a `CHECK' block).
-
-EXAMPLE
-
- package UNIVERSAL;
- use Attribute::Handlers;
-
- my %name;
- sub name { return $name{$_[2]}||*{$_[1]}{NAME} }
-
- sub Name :ATTR { $name{$_[2]} = $_[4] }
-
- sub Purpose :ATTR { print STDERR "Purpose of ", &name, " is $_[4]\n" }
-
- sub Unit :ATTR { print STDERR &name, " measured in $_[4]\n" }
-
-
- package main;
-
- my $capacity : Name(capacity)
- : Purpose(to store max storage capacity for files)
- : Unit(Gb);
-
- package Other;
-
- sub foo : Purpose(to foo all data before barring it) { }
-
-
-AUTHOR
- Damian Conway (damian@conway.org)
-
-COPYRIGHT
- Copyright (c) 2001, Damian Conway. All Rights Reserved.
- This module is free software. It may be used, redistributed
- and/or modified under the same terms as Perl itself.
-
-
-==============================================================================
-
-CHANGES IN VERSION 0.76
-
-
- - Fixed documentation nit (thanks Rick)
-
- - Improving intuitiveness of autotie mechanism (thanks Marcel)
-
- - Added $VERSION numbrs to demo modules (seems bizarre to me, but
- they're core too now).
-
-
-==============================================================================
-
-AVAILABILITY
-
-Attribute::Handlers has been uploaded to the CPAN
-and is also available from:
-
- http://www.csse.monash.edu.au/~damian/CPAN/Attribute-Handlers.tar.gz
-
-==============================================================================
diff --git a/lib/Attribute/Handlers/demo/Demo.pm b/lib/Attribute/Handlers/demo/Demo.pm
deleted file mode 100755
index e763d23b90..0000000000
--- a/lib/Attribute/Handlers/demo/Demo.pm
+++ /dev/null
@@ -1,50 +0,0 @@
-$DB::single = 1;
-
-package Demo;
-$VERSION = '1.00';
-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;
diff --git a/lib/Attribute/Handlers/demo/Descriptions.pm b/lib/Attribute/Handlers/demo/Descriptions.pm
deleted file mode 100755
index 023f6f752f..0000000000
--- a/lib/Attribute/Handlers/demo/Descriptions.pm
+++ /dev/null
@@ -1,25 +0,0 @@
-package Descriptions;
-$VERSION = '1.00';
-
-use Attribute::Handlers;
-
-my %name;
-
-sub name {
- return $name{$_[2]}||*{$_[1]}{NAME};
-}
-
-sub UNIVERSAL::Name :ATTR {
- $name{$_[2]} = $_[4];
-}
-
-sub UNIVERSAL::Purpose :ATTR {
- print STDERR "Purpose of ", &name, " is $_[4]\n";
-}
-
-sub UNIVERSAL::Unit :ATTR {
- print STDERR &name, " measured in $_[4]\n";
-}
-
-
-1;
diff --git a/lib/Attribute/Handlers/demo/MyClass.pm b/lib/Attribute/Handlers/demo/MyClass.pm
deleted file mode 100755
index 079b2cc3ad..0000000000
--- a/lib/Attribute/Handlers/demo/MyClass.pm
+++ /dev/null
@@ -1,64 +0,0 @@
-package MyClass;
-$VERSION = '1.00';
-use v5.6.0;
-use base Attribute::Handlers;
-no warnings 'redefine';
-
-
-sub Good : ATTR(SCALAR) {
- my ($package, $symbol, $referent, $attr, $data) = @_;
-
- # Invoked for any scalar variable with a :Good attribute,
- # provided the variable was declared in MyClass (or
- # a derived class) or typed to MyClass.
-
- # Do whatever to $referent here (executed in CHECK phase).
- local $" = ", ";
- print "MyClass::Good:ATTR(SCALAR)(@_);\n";
-};
-
-sub Bad : ATTR(SCALAR) {
- # Invoked for any scalar variable with a :Bad attribute,
- # provided the variable was declared in MyClass (or
- # a derived class) or typed to MyClass.
- local $" = ", ";
- print "MyClass::Bad:ATTR(SCALAR)(@_);\n";
-}
-
-sub Good : ATTR(ARRAY) {
- # Invoked for any array variable with a :Good attribute,
- # provided the variable was declared in MyClass (or
- # a derived class) or typed to MyClass.
- local $" = ", ";
- print "MyClass::Good:ATTR(ARRAY)(@_);\n";
-};
-
-sub Good : ATTR(HASH) {
- # Invoked for any hash variable with a :Good attribute,
- # provided the variable was declared in MyClass (or
- # a derived class) or typed to MyClass.
- local $" = ", ";
- print "MyClass::Good:ATTR(HASH)(@_);\n";
-};
-
-sub Ugly : ATTR(CODE) {
- # Invoked for any subroutine declared in MyClass (or a
- # derived class) with an :Ugly attribute.
- local $" = ", ";
- print "MyClass::UGLY:ATTR(CODE)(@_);\n";
-};
-
-sub Omni : ATTR {
- # Invoked for any scalar, array, hash, or subroutine
- # with an :Omni attribute, provided the variable or
- # subroutine was declared in MyClass (or a derived class)
- # or the variable was typed to MyClass.
- # Use ref($_[2]) to determine what kind of referent it was.
- local $" = ", ";
- my $type = ref $_[2];
- print "MyClass::OMNI:ATTR($type)(@_);\n";
- use Data::Dumper 'Dumper';
- print Dumper [ \@_ ];
-};
-
-1;
diff --git a/lib/Attribute/Handlers/demo/demo.pl b/lib/Attribute/Handlers/demo/demo.pl
deleted file mode 100755
index 7a269e81b5..0000000000
--- a/lib/Attribute/Handlers/demo/demo.pl
+++ /dev/null
@@ -1,31 +0,0 @@
-#! /usr/local/bin/perl -w
-
-use v5.6.0;
-use base Demo;
-
-my $y : Demo :This($this) = sub : Demo(1,2,3) {};
-sub x : Demo(4, 5, 6) :Multi {}
-my %z : Demo(hash) :Multi(method,maybe);
-# my %a : NDemo(hash);
-
-{
- package Named;
-
- use base Demo;
-
- sub Demo :ATTR(SCALAR) { print STDERR "tada\n" }
-
- my $y : Demo :This($this) = sub : Demo(1,2,3) {};
- sub x : ExplMulti :Demo(4,5,6) {}
- my %z : ExplMulti :Demo(hash);
- my Named $q : Demo;
-}
-
-package Other;
-
-my Demo $dother : Demo :This($this) = "okay";
-my Named $nother : Demo :This($this) = "okay";
-
-# my $unnamed : Demo;
-
-# sub foo : Demo();
diff --git a/lib/Attribute/Handlers/demo/demo2.pl b/lib/Attribute/Handlers/demo/demo2.pl
deleted file mode 100755
index 387ab4407d..0000000000
--- a/lib/Attribute/Handlers/demo/demo2.pl
+++ /dev/null
@@ -1,21 +0,0 @@
-#! /usr/local/bin/perl -w
-
-use v5.6.0;
-use base Demo;
-no warnings 'redefine';
-
-my %z1 :Multi(method?maybe);
-my %z2 :Multi(method,maybe);
-my %z3 :Multi(qw(method,maybe));
-my %z4 :Multi(qw(method maybe));
-my %z5 :Multi('method','maybe');
-
-sub foo :Demo(till=>ears=>are=>bleeding) {}
-sub foo :Demo(['till','ears','are','bleeding']) {}
-sub foo :Demo(qw/till ears are bleeding/) {}
-sub foo :Demo(till,ears,are,bleeding) {}
-
-sub foo :Demo(my,ears,are,bleeding) {}
-sub foo :Demo(my=>ears=>are=>bleeding) {}
-sub foo :Demo(qw/my, ears, are, bleeding/) {}
-sub foo :Demo(qw/my ears are bleeding) {}
diff --git a/lib/Attribute/Handlers/demo/demo3.pl b/lib/Attribute/Handlers/demo/demo3.pl
deleted file mode 100755
index 6760fc08ba..0000000000
--- a/lib/Attribute/Handlers/demo/demo3.pl
+++ /dev/null
@@ -1,16 +0,0 @@
-package main;
-use MyClass;
-
-my MyClass $x :Good :Bad(1**1-1) :Omni(vorous);
-
-package SomeOtherClass;
-use base MyClass;
-
-sub tent { 'acle' }
-
-sub w :Ugly(sister) :Omni('po',tent()) {}
-
-my @y :Good :Omni(s/cie/nt/);
-
-my %y :Good(q/bye) :Omni(q/bus/);
-
diff --git a/lib/Attribute/Handlers/demo/demo4.pl b/lib/Attribute/Handlers/demo/demo4.pl
deleted file mode 100755
index 22d9fd983b..0000000000
--- a/lib/Attribute/Handlers/demo/demo4.pl
+++ /dev/null
@@ -1,9 +0,0 @@
-use Descriptions;
-
-my $capacity : Name(capacity)
- : Purpose(to store max storage capacity for files)
- : Unit(Gb);
-
-package Other;
-
-sub foo : Purpose(to foo all data before barring it) { }
diff --git a/lib/Attribute/Handlers/demo/demo_call.pl b/lib/Attribute/Handlers/demo/demo_call.pl
deleted file mode 100755
index 1a97342116..0000000000
--- a/lib/Attribute/Handlers/demo/demo_call.pl
+++ /dev/null
@@ -1,11 +0,0 @@
-#! /usr/local/bin/perl -w
-
-use Attribute::Handlers;
-
-sub Call : ATTR {
- use Data::Dumper 'Dumper';
- print Dumper [ @_ ];
-}
-
-
-sub x : Call(some,data) { };
diff --git a/lib/Attribute/Handlers/demo/demo_chain.pl b/lib/Attribute/Handlers/demo/demo_chain.pl
deleted file mode 100755
index 8999c1ccc7..0000000000
--- a/lib/Attribute/Handlers/demo/demo_chain.pl
+++ /dev/null
@@ -1,27 +0,0 @@
-#! /usr/local/bin/perl -w
-
-use Attribute::Handlers;
-
-sub Prefix : ATTR {
- my ($glob, $sub) = @_[1,2];
- no warnings 'redefine';
- *$glob = sub {
- print "This happens first\n";
- $sub->(@_);
- };
-}
-
-sub Postfix : ATTR {
- my ($glob, $sub) = @_[1,2];
- no warnings 'redefine';
- *$glob = sub {
- $sub->(@_);
- print "This happens last\n";
- };
-}
-
-sub test : Postfix Prefix {
- print "Hello World\n";
-}
-
-test();
diff --git a/lib/Attribute/Handlers/demo/demo_cycle.pl b/lib/Attribute/Handlers/demo/demo_cycle.pl
deleted file mode 100755
index 5f307a7036..0000000000
--- a/lib/Attribute/Handlers/demo/demo_cycle.pl
+++ /dev/null
@@ -1,25 +0,0 @@
-package Selfish;
-
-sub TIESCALAR {
- use Data::Dumper 'Dumper';
- print Dumper [ \@_ ];
- bless [ @_[1..$#_] ], $_[0];
-}
-
-sub FETCH {
- use Data::Dumper 'Dumper';
- Dumper [ @{$_[0]} ];
-}
-
-package main;
-
-use Attribute::Handlers autotieref => { Selfish => Selfish };
-
-my $next : Selfish("me");
-print "$next\n";
-
-my $last : Selfish("you","them","who?");
-print "$last\n";
-
-my $other : Selfish(["you","them","who?"]);
-print "$other\n";
diff --git a/lib/Attribute/Handlers/demo/demo_hashdir.pl b/lib/Attribute/Handlers/demo/demo_hashdir.pl
deleted file mode 100755
index 75e252b1a0..0000000000
--- a/lib/Attribute/Handlers/demo/demo_hashdir.pl
+++ /dev/null
@@ -1,9 +0,0 @@
-use Attribute::Handlers autotie => { Dir => 'Tie::Dir qw(DIR_UNLINK)' };
-
-my %dot : Dir('.', DIR_UNLINK);
-
-print join "\n", keys %dot;
-
-delete $dot{killme};
-
-print join "\n", keys %dot;
diff --git a/lib/Attribute/Handlers/demo/demo_phases.pl b/lib/Attribute/Handlers/demo/demo_phases.pl
deleted file mode 100755
index 022f7e1537..0000000000
--- a/lib/Attribute/Handlers/demo/demo_phases.pl
+++ /dev/null
@@ -1,18 +0,0 @@
-#! /usr/local/bin/perl -w
-
-use Attribute::Handlers;
-use Data::Dumper 'Dumper';
-
-sub UNIVERSAL::Beginner : ATTR(SCALAR,BEGIN,END)
- { print STDERR "Beginner: ", Dumper \@_}
-
-sub UNIVERSAL::Checker : ATTR(CHECK,SCALAR)
- { print STDERR "Checker: ", Dumper \@_}
-
-sub UNIVERSAL::Initer : ATTR(SCALAR,INIT)
- { print STDERR "Initer: ", Dumper \@_}
-
-package Other;
-
-my $x :Initer(1) :Checker(2) :Beginner(3);
-my $y :Initer(4) :Checker(5) :Beginner(6);
diff --git a/lib/Attribute/Handlers/demo/demo_range.pl b/lib/Attribute/Handlers/demo/demo_range.pl
deleted file mode 100755
index b63d518ee5..0000000000
--- a/lib/Attribute/Handlers/demo/demo_range.pl
+++ /dev/null
@@ -1,21 +0,0 @@
-package UNIVERSAL;
-use Attribute::Handlers;
-use Tie::RangeHash;
-
-sub Ranged : ATTR(HASH) {
- my ($package, $symbol, $referent, $attr, $data) = @_;
- tie %$referent, 'Tie::RangeHash';
-}
-
-package main;
-
-my %next : Ranged;
-
-$next{'cat,dog'} = "animal";
-$next{'fish,fowl'} = "meal";
-$next{'heaven,hell'} = "reward";
-
-while (<>) {
- chomp;
- print $next{$_}||"???", "\n";
-}
diff --git a/lib/Attribute/Handlers/demo/demo_rawdata.pl b/lib/Attribute/Handlers/demo/demo_rawdata.pl
deleted file mode 100755
index c0754f06a9..0000000000
--- a/lib/Attribute/Handlers/demo/demo_rawdata.pl
+++ /dev/null
@@ -1,12 +0,0 @@
-package UNIVERSAL;
-use Attribute::Handlers;
-
-sub Cooked : ATTR(SCALAR) { print pop, "\n" }
-sub PostRaw : ATTR(SCALAR,RAWDATA) { print pop, "\n" }
-sub PreRaw : ATTR(SCALAR,RAWDATA) { print pop, "\n" }
-
-package main;
-
-my $x : Cooked(1..5);
-my $y : PreRaw(1..5);
-my $z : PostRaw(1..5);
diff --git a/lib/Attribute/Handlers/t/multi.t b/lib/Attribute/Handlers/t/multi.t
deleted file mode 100644
index 773606d55e..0000000000
--- a/lib/Attribute/Handlers/t/multi.t
+++ /dev/null
@@ -1,131 +0,0 @@
-END {print "not ok 1\n" unless $loaded;}
-use v5.6.0;
-use Attribute::Handlers;
-$loaded = 1;
-
-CHECK { $main::phase++ }
-
-######################### End of black magic.
-
-# Insert your test code below (better if it prints "ok 13"
-# (correspondingly "not ok 13") depending on the success of chunk 13
-# of the test code):
-
-sub ok { $::count++; push @::results, [$_[1], $_[0]?"":"not "]; }
-
-END { print "1..$::count\n";
- print map "$_->[1]ok $_->[0]\n",
- sort {$a->[0]<=>$b->[0]}
- grep $_->[0], @::results }
-
-package Test;
-use warnings;
-no warnings 'redefine';
-
-sub UNIVERSAL::Lastly :ATTR(INIT) { ::ok $_[4][0] && $main::phase, $_[4][1] }
-
-sub UNIVERSAL::Okay :ATTR(BEGIN) { ::ok $_[4][0] && !$main::phase, $_[4][1] }
-
-sub Dokay :ATTR(SCALAR) { ::ok @{$_[4]} }
-sub Dokay :ATTR(HASH) { ::ok @{$_[4]} }
-sub Dokay :ATTR(ARRAY) { ::ok @{$_[4]} }
-sub Dokay :ATTR(CODE) { ::ok @{$_[4]} }
-
-sub Vokay :ATTR(VAR) { ::ok @{$_[4]} }
-
-sub Aokay :ATTR(ANY) { ::ok @{$_[4]} }
-
-package main;
-use warnings;
-
-my $x1 :Lastly(1,41);
-my @x1 :Lastly(1=>42);
-my %x1 :Lastly(1,43);
-sub x1 :Lastly(1,44) {}
-
-my Test $x2 :Dokay(1,5);
-
-package Test;
-my $x3 :Dokay(1,6);
-my Test $x4 :Dokay(1,7);
-sub x3 :Dokay(1,8) {}
-
-my $y1 :Okay(1,9);
-my @y1 :Okay(1,10);
-my %y1 :Okay(1,11);
-sub y1 :Okay(1,12) {}
-
-my $y2 :Vokay(1,13);
-my @y2 :Vokay(1,14);
-my %y2 :Vokay(1,15);
-# BEGIN {eval 'sub y2 :Vokay(0,16) {}; 1' or
-::ok(1,16);
-# }
-
-my $z :Aokay(1,17);
-my @z :Aokay(1,18);
-my %z :Aokay(1,19);
-sub z :Aokay(1,20) {};
-
-package DerTest;
-use base 'Test';
-use warnings;
-
-my $x5 :Dokay(1,21);
-my Test $x6 :Dokay(1,22);
-sub x5 :Dokay(1,23);
-
-my $y3 :Okay(1,24);
-my @y3 :Okay(1,25);
-my %y3 :Okay(1,26);
-sub y3 :Okay(1,27) {}
-
-package Unrelated;
-
-my $x11 :Okay(1,1);
-my @x11 :Okay(1=>2);
-my %x11 :Okay(1,3);
-sub x11 :Okay(1,4) {}
-
-BEGIN { eval 'my $x7 :Dokay(0,28)' or ::ok(1,28); }
-my Test $x8 :Dokay(1,29);
-eval 'sub x7 :Dokay(0,30) {}' or ::ok(1,30);
-
-
-package Tie::Loud;
-
-sub TIESCALAR { ::ok(1,31); bless {}, $_[0] }
-sub FETCH { ::ok(1,32); return 1 }
-sub STORE { ::ok(1,33); return 1 }
-
-package Tie::Noisy;
-
-sub TIEARRAY { ::ok(1,$_[1]); bless {}, $_[0] }
-sub FETCH { ::ok(1,35); return 1 }
-sub STORE { ::ok(1,36); return 1 }
-sub FETCHSIZE { 100 }
-
-package Tie::Row::dy;
-
-sub TIEHASH { ::ok(1,$_[1]); bless {}, $_[0] }
-sub FETCH { ::ok(1,38); return 1 }
-sub STORE { ::ok(1,39); return 1 }
-
-package main;
-
-eval 'sub x7 :ATTR(SCALAR) :ATTR(CODE) {}' and ::ok(0,40) or ::ok(1,40);
-
-use Attribute::Handlers autotie => { Other::Loud => Tie::Loud,
- Noisy => Tie::Noisy,
- UNIVERSAL::Rowdy => Tie::Row::dy,
- };
-
-my Other $loud : Loud;
-$loud++;
-
-my @noisy : Noisy(34);
-$noisy[0]++;
-
-my %rowdy : Rowdy(37,'this arg should be ignored');
-$rowdy{key}++;
-