1#!perl 2 3use Test::More tests => 18; 4use Attribute::Handlers; 5 6sub Args : ATTR(CODE) { 7 my ($package, $symbol, $referent, $attr, $data, $phase, $filename, $linenum) = @_; 8 is( $package, 'main', 'package' ); 9 is( $symbol, \*foo, 'symbol' ); 10 is( $referent, \&foo, 'referent' ); 11 is( $attr, 'Args', 'attr' ); 12 is( ref $data, 'ARRAY', 'data' ); 13 is( $data->[0], 'bar', 'data' ); 14 is( $phase, 'CHECK', 'phase' ); 15 is( $filename, __FILE__, 'filename' ); 16 is( $linenum, 19, 'linenum' ); 17} 18 19sub foo :Args(bar) {} 20 21my $ref; 22sub myref { $ref = shift; } 23my $b; 24#line 42 25eval "my \$bar :SArgs(grumpf); \$b = \\\$bar"; 26is( $b, $ref, 'referent' ); 27 28sub SArgs : ATTR(SCALAR) { 29 my ($package, $symbol, $referent, $attr, $data, $phase, $filename, $linenum) = @_; 30 is( $package, 'main', 'package' ); 31 is( $symbol, 'LEXICAL', 'symbol' ); 32 myref($referent); 33 is( $attr, 'SArgs', 'attr' ); 34 is( ref $data, 'ARRAY', 'data' ); 35 is( $data->[0], 'grumpf', 'data' ); 36 is( $phase, 'CHECK', 'phase' ); 37 TODO: { 38 local $TODO = "Doesn't work correctly" if $] < 5.008; 39 is( $filename, __FILE__, 'filename' ); 40 is( $linenum, 42, 'linenum' ); 41 } 42} 43