A less-well-known feature of use and require is that it gives a "hint" to the compiler that My::Module might be a class name so that "new My::Module" gets parsed okay. You don't need this hint unless you also have a subroutine "new" in the current package.
So I'd suggest you start moving away from the "new My::Module" syntax as you can see how fragile it is.$ perl use strict; my $o= new My::Module; ^D Can't locate object method "new" via package "My::Module" $ perl use strict; sub new; my $o= new My::Module; ^D Bareword "My::Module" not allowed while "strict subs" in use $ perl use strict; BEGIN { $My::Module::VERSION= 1.0; } sub new; my $o= new My::Module; ^D Can't locate object method "new" via package "My::Module" $
As others have said, autouse.pm has an out-right bug in it.
You problem implies that use autouse My::Module => qw(new); predeclares "sub new;" instead of (or in addition to) "sub My::Module::new". It took me a bit to spot the problem. autouse.pm is not meant for use with OO modules and the routines you list get exported. My::Module doesn't normally export new() for good reason!
To get something like autouse.pm except for OO modules is actually much less work than what autouse.pm does. See (tye)Re: $PERL_USE=$PERL_USE: but use the better version in the reply.
If you want something that only does AutoNew for a particular package:
- tye (but my friends call me "Tye")sub My::Module::new { require My::Module; undef &My::Module::new; goto &My::Module::new; }
In reply to (tye)Re: use autouse with OOP
by tye
in thread use autouse with OOP
by DBX
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |