<?xml version="1.0" encoding="windows-1252"?>
<node id="686764" title="rovf's scratchpad" created="2008-05-15 11:53:32" updated="2008-05-15 07:53:32">
<type id="182711">
scratchpad</type>
<author id="683288">
rovf</author>
<data>
<field name="doctext">
&lt;p&gt;
&lt;b&gt;
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.
&lt;/b&gt;
&lt;/p&gt;
&lt;code&gt;
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($;$$) { &amp;_foo } # of course you don't HAVE 
                        # to write the prototype
sub _foo : Default('hanky','panky') # but no proto here!
{
  ...
}
&lt;/code&gt;
&lt;br /&gt;[id://17544]</field>
</data>
</node>
