scratchpad
rovf
<p>
<b>
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.
</b>
</p>
<code>
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!
{
...
}
</code>
<br />[id://17544]