http://www.perlmonks.org?node_id=1000208


in reply to Core module: Attribute::Handlers behaviour

Even I'm not getting, why it is not working for "Test 4" ...

Module.pm

package Module; use strict; use warnings; use Attribute::Handlers; #sub TRACE :ATTR(CODE) { # Test 1 #sub TRACE :ATTR(CODE,INIT) { # Test 2 #sub TRACE :ATTR(CODE,CHECK) { # Test 3 sub TRACE :ATTR(CODE,BEGIN) { # Test 4 my ($pkg, $sym, $ref, $attr, $data, $phase, $file, $line) = @_; *{ $sym } = sub { warn "$file($line) called with [@_]\n"; my( @rc )= &$ref; warn "$file($line): returning [ @rc ]\n"; } } sub new :TRACE{ my $instance = shift; my $class = ref($instance) || $instance; my $self = {}; return bless($self, $class); } END { } 1; __END__

Test.pl

#!/usr/local/bin/perl use strict; use warnings; my $module_to_load = 'Module'; eval "use $module_to_load;"; # Create object my $obj = Module->new(); print "REF: " . ref($obj) ."\n";

Results: Test 1: Code compiles and executes, but without ATTR support.

Test 2: Code compiles and executes, but without ATTR support.

Test 3: Code compiles and executes, but without ATTR support.

Test 4: Code throws and error msg as - Can't locate object method "new" via package "Module" at ./Test.pl line 10.

perl version: This is perl, v5.8.5 built for i386-linux-thread-multi

OS version: Linux <host> 2.6.9-67.EL #1 Wed Nov 7 13:41:13 EST 2007 i686 i686 i386 GNU/Linux

Thanks