use strict ;
use warnings;
sub insert_alias {print "insert $_[0]\n"; return 1}
insert_alias('Mike');
insert_alias('SAINT');
####
use strict ;
use warnings;
sub insert_Nickname {print "insert $_[0]\n"; return 1}
insert_Nickname('Jack');
insert_Nickname('Jill');
insert_Nickname('SAINT');
insert_Nickname('Saint');
##
##
# try_AspectPrecon1.pl
use strict ;
use warnings;
use AspectPrecon qw/ pre_insert /;
pre_insert()->enable;
sub insert_alias {print "insert $_[0]\n"; return 1}
insert_alias('Mike');
insert_alias('SAINT');
__END__
Sorry, SAINT has been reserved. at try_AspectPrecon1.pl line 10
main::insert_alias(Mike) is being called.
insert Mike
main::insert_alias(SAINT) is being called.
##
##
package AspectPrecon;
use strict ;
use warnings;
use Carp;
use Exporter;
use Aspect qw(advice calls);
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(pre_insert);
my $subc = sub {
print $::thisjp->signature(@_) . " is being called.\n";
croak "Sorry, $_[0] has been reserved." if $_[0] =~ /saint/i;
};
my $spec = qr/main::insert_.*/;
my $pre_insert = advice(calls($spec), $subc);
sub pre_insert {$pre_insert};
1;
##
##
# try_AspectPrecon2.pl
use strict ;
use warnings;
use AspectPrecon qw/ pre_insert /;
sub insert_Nickname {print "insert $_[0]\n"; return 1}
insert_Nickname('Jack');
pre_insert()->enable;
insert_Nickname('Jill');
pre_insert()->disable;
insert_Nickname('SAINT');
pre_insert()->enable;
insert_Nickname('Saint');
__END__
Sorry, Saint has been reserved. at try_AspectPrecon2.pl line 17
insert Jack
main::insert_Nickname(Jill) is being called.
insert Jill
insert SAINT
main::insert_Nickname(Saint) is being called.
##
##
package AspectPostcon;
use strict ;
use warnings;
use Exporter;
use Aspect qw(advice returns);
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(post_insert);
my $subr = sub {
print $::thisjp->sub . " has done its work.\n";
print "Tell God a $_[0] has been created.\n" if $_[0] =~ /saint/i;
return 1;
};
my $spec = qr/main::insert_.*/;
my $post_insert = advice(returns($spec), $subr);
sub post_insert {$post_insert};
1;
##
##
# try_AspectPostcon1.pl
use strict ;
use warnings;
use AspectPostcon qw/ post_insert /;
post_insert()->enable;
sub insert_alias {print "insert $_[0]\n"; return 1}
insert_alias('Mike');
insert_alias('SAINT');
__END__
insert Mike
main::insert_alias has done its work.
insert SAINT
main::insert_alias has done its work.
Tell God a SAINT has been created.
##
##
# try_AspectPostcon2.pl
use strict ;
use warnings;
use AspectPostcon qw/ post_insert /;
post_insert()->enable;
sub insert_Nickname {print "insert $_[0]\n"; return 1}
insert_Nickname('Jack');
insert_Nickname('SAINT');
insert_Nickname('Jill');
insert_Nickname('Saint');
__END__
insert Jack
main::insert_Nickname has done its work.
insert SAINT
main::insert_Nickname has done its work.
Tell God a SAINT has been created.
insert Jill
main::insert_Nickname has done its work.
insert Saint
main::insert_Nickname has done its work.
Tell God a Saint has been created.