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

What you have to do to use Attribute::Default from CPAN, if you want to use it in a module which also uses the Exporter.

package Example; use strict; use warnings; # (1) Access the Exporter in the following way. # - with 'use', not 'require' or 'use base "..."'. # - qw(import) # - do NOT fiddle around with @ISA use Exporter qw(import); # (2) Access Attribute::Default with use base, not with # use Attribute::Default; # (This is the documented way anyway) use base 'Attribute::Default'; our @EXPORT=qw(foo bar); our @EXPORT_OK=qw(baz); # subs which you are only using within this package, # you can define as documented in the perldoc for # Attribute::Default, but DO NOT USE PROTOTYPES. # For those subs however, which are exported, # you have to use the following trick. Let's assume # that foo is supposed to have the signature # sub foo($;$$) # and that the default values for the missing arguments # are 'hanky' and 'panky'. Then do it like this: sub foo($;$$) { &_foo } # of course you don't HAVE # to write the prototype sub _foo : Default('hanky','panky') # but no proto here! { ... }

Using the Chatterbox: URLs, Special Characters, and Code