Sub::Exporter::ForMethods - helper routines for using Sub::Exporter to build methods
version 0.100052
In an exporting library:
package Method::Builder; use Sub::Exporter::ForMethods qw(method_installer); use Sub::Exporter -setup => { exports => [ method => \'_method_generator' ], installer => method_installer, }; sub _method_generator { my ($self, $name, $arg, $col) = @_; return sub { ... }; };
In an importing library:
package Vehicle::Autobot; use Method::Builder method => { -as => 'transform' };
The synopsis section, above, looks almost indistinguishable from any other use of Sub::Exporter, apart from the use of method_installer. It is nearly indistinguishable in behavior, too. The only change is that subroutines exported from Method::Builder into named slots in Vehicle::Autobot will be wrapped in a subroutine called Vehicle::Autobot::transform. This will insert a named frame into stack traces to aid in debugging.
method_installer
Vehicle::Autobot::transform
More importantly (for the author, anyway), they will not be removed by namespace::autoclean. This makes the following code work:
package MyLibrary; use Math::Trig qw(tan); # uses Exporter.pm use String::Truncate qw(trunc); # uses Sub::Exporter's defaults use Sub::Exporter::ForMethods qw(method_installer); use Mixin::Linewise { installer => method_installer }, qw(read_file); use namespace::autoclean; ... 1;
After MyLibrary is compiled, namespace::autoclean will remove tan and trunc as foreign contaminants, but will leave read_file in place. It will also remove method_installer, an added win.
namespace::autoclean
tan
trunc
read_file
Sub::Exporter::ForMethods offers only one routine for export, and it may also be called by its full package name:
my $installer = method_installer(\%arg);
This routine returns an installer suitable for use as the installer argument to Sub::Exporter. It updates the \@to_export argument to wrap all code that will be installed by name in a named subroutine, then passes control to the default Sub::Exporter installer.
installer
\@to_export
The only argument to method_installer is an optional hashref which may contain a single entry for rebless. If the value for rebless is true, when a blessed subroutine is wrapped, the wrapper will be blessed into the same package.
rebless
Ricardo Signes <rjbs@cpan.org>
This software is copyright (c) 2015 by Ricardo Signes.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Sub::Exporter::ForMethods, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Sub::Exporter::ForMethods
CPAN shell
perl -MCPAN -e shell install Sub::Exporter::ForMethods
For more information on module installation, please visit the detailed CPAN module installation guide.