#!perl
use Test::More tests => 18;
use Attribute::Handlers;
sub Args : ATTR(CODE) {
my ($package, $symbol, $referent, $attr, $data, $phase, $filename, $linenum) = @_;
is( $package, 'main', 'package' );
is( $symbol, \*foo, 'symbol' );
is( $referent, \&foo, 'referent' );
is( $attr, 'Args', 'attr' );
is( ref $data, 'ARRAY', 'data' );
is( $data->[0], 'bar', 'data' );
is( $phase, 'CHECK', 'phase' );
is( $filename, __FILE__, 'filename' );
is( $linenum, 19, 'linenum' );
}
sub foo :Args(bar) {}
my $ref;
sub myref { $ref = shift; }
my $b;
#line 42
eval "my \$bar :SArgs(grumpf); \$b = \\\$bar";
is( $b, $ref, 'referent' );
sub SArgs : ATTR(SCALAR) {
my ($package, $symbol, $referent, $attr, $data, $phase, $filename, $linenum) = @_;
is( $package, 'main', 'package' );
is( $symbol, 'LEXICAL', 'symbol' );
myref($referent);
is( $attr, 'SArgs', 'attr' );
is( ref $data, 'ARRAY', 'data' );
is( $data->[0], 'grumpf', 'data' );
is( $phase, 'CHECK', 'phase' );
TODO: {
local $TODO = "Doesn't work correctly" if $] < 5.008;
is( $filename, __FILE__, 'filename' );
is( $linenum, 42, 'linenum' );
}
}