################# UseEvalAttributes2.pm package UseEvalAttributes2; use strict; use warnings; use EvalAttributes( qw[CONDITION NAME] ); BEGIN { our @ISA = qw[EvalAttributes]; } INIT { *sub1 = macro_sub( CONDITION => 0, NAME => 'sub1' ); *sub2 = macro_sub( CONDITION => 1, NAME => 'sub2' ); } sub macro_sub : Macro( qw[CONDITION NAME] ) { print NAME . " COMMON CODE\n"; print NAME . " CONDITIONAL CODE\n" if CONDITION; return; } 1; __END__ $ perl -Mstrict -Mwarnings -MB::Deparse -e ' use UseEvalAttributes2; UseEvalAttributes2::sub1(); UseEvalAttributes2::sub2(); print "sub ", B::Deparse->new()->coderef2text( \&UseEvalAttributes2::sub1 ), "\n"; print "sub ", B::Deparse->new()->coderef2text( \&UseEvalAttributes2::sub2 ), "\n"; ' sub1 COMMON CODE sub2 COMMON CODE sub2 CONDITIONAL CODE sub { package EvalAttributes; BEGIN {${^WARNING_BITS} = "UUUUUUUUUUUU"} use strict 'refs'; local *__ANON__ = 'EvalAttributes::Macro::new_referent'; package UseEvalAttributes2; print "sub1 COMMON CODE\n"; '???'; return; } sub { package EvalAttributes; BEGIN {${^WARNING_BITS} = "UUUUUUUUUUUU"} use strict 'refs'; local *__ANON__ = 'EvalAttributes::Macro::new_referent'; package UseEvalAttributes2; print "sub2 COMMON CODE\n"; print "sub2 CONDITIONAL CODE\n"; return; }