diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2001-12-09 15:20:08 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-12-09 15:20:08 +0000 |
commit | c27482a4ae759620db85e55c84e6da0b10b95e5a (patch) | |
tree | 14167b3057c9228d5b472b180b701d67bf3a8bd4 /lib/Attribute | |
parent | 95f0a2f1ffc68ef908768ec5d39e4102afd28c1e (diff) | |
download | perl-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/Changes | 73 | ||||
-rw-r--r-- | lib/Attribute/Handlers/README | 74 | ||||
-rwxr-xr-x | lib/Attribute/Handlers/demo/Demo.pm | 50 | ||||
-rwxr-xr-x | lib/Attribute/Handlers/demo/Descriptions.pm | 25 | ||||
-rwxr-xr-x | lib/Attribute/Handlers/demo/MyClass.pm | 64 | ||||
-rwxr-xr-x | lib/Attribute/Handlers/demo/demo.pl | 31 | ||||
-rwxr-xr-x | lib/Attribute/Handlers/demo/demo2.pl | 21 | ||||
-rwxr-xr-x | lib/Attribute/Handlers/demo/demo3.pl | 16 | ||||
-rwxr-xr-x | lib/Attribute/Handlers/demo/demo4.pl | 9 | ||||
-rwxr-xr-x | lib/Attribute/Handlers/demo/demo_call.pl | 11 | ||||
-rwxr-xr-x | lib/Attribute/Handlers/demo/demo_chain.pl | 27 | ||||
-rwxr-xr-x | lib/Attribute/Handlers/demo/demo_cycle.pl | 25 | ||||
-rwxr-xr-x | lib/Attribute/Handlers/demo/demo_hashdir.pl | 9 | ||||
-rwxr-xr-x | lib/Attribute/Handlers/demo/demo_phases.pl | 18 | ||||
-rwxr-xr-x | lib/Attribute/Handlers/demo/demo_range.pl | 21 | ||||
-rwxr-xr-x | lib/Attribute/Handlers/demo/demo_rawdata.pl | 12 | ||||
-rw-r--r-- | lib/Attribute/Handlers/t/multi.t | 131 |
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}++; - |