.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.48) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "Sub::Exporter::ForMethods 3" .TH Sub::Exporter::ForMethods 3 2026-10-25 "perl v5.44.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH SYNOPSIS .IX Header "SYNOPSIS" In an exporting library: .PP .Vb 1 \& package Method::Builder; \& \& use Sub::Exporter::ForMethods qw(method_installer); \& \& use Sub::Exporter \-setup => { \& exports => [ method => \e\*(Aq_method_generator\*(Aq ], \& installer => method_installer, \& }; \& \& sub _method_generator { \& my ($self, $name, $arg, $col) = @_; \& return sub { ... }; \& }; .Ve .PP In an importing library: .PP .Vb 2 \& package Vehicle::Autobot; \& use Method::Builder method => { \-as => \*(Aqtransform\*(Aq }; .Ve .SH DESCRIPTION .IX Header "DESCRIPTION" The synopsis section, above, looks almost indistinguishable from any other use of Sub::Exporter, apart from the use of \&\f(CW\*(C`method_installer\*(C'\fR. 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 \&\f(CW\*(C`Vehicle::Autobot::transform\*(C'\fR. This will insert a named frame into stack traces to aid in debugging. .PP More importantly (for the author, anyway), they will not be removed by namespace::autoclean. This makes the following code work: .PP .Vb 1 \& package MyLibrary; \& \& use Math::Trig qw(tan); # uses Exporter.pm \& use String::Truncate qw(trunc); # uses Sub::Exporter\*(Aqs defaults \& \& use Sub::Exporter::ForMethods qw(method_installer); \& use Mixin::Linewise { installer => method_installer }, qw(read_file); \& \& use namespace::autoclean; \& \& ... \& \& 1; .Ve .PP After MyLibrary is compiled, \f(CW\*(C`namespace::autoclean\*(C'\fR will remove \f(CW\*(C`tan\*(C'\fR and \&\f(CW\*(C`trunc\*(C'\fR as foreign contaminants, but will leave \f(CW\*(C`read_file\*(C'\fR in place. It will also remove \f(CW\*(C`method_installer\*(C'\fR, an added win. .SH EXPORTS .IX Header "EXPORTS" Sub::Exporter::ForMethods offers only one routine for export, and it may also be called by its full package name: .SS method_installer .IX Subsection "method_installer" .Vb 1 \& my $installer = method_installer(\e%arg); .Ve .PP This routine returns an installer suitable for use as the \f(CW\*(C`installer\*(C'\fR argument to Sub::Exporter. It updates the \f(CW\*(C`\e@to_export\*(C'\fR argument to wrap all code that will be installed by name in a named subroutine, then passes control to the default Sub::Exporter installer. .PP The only argument to \f(CW\*(C`method_installer\*(C'\fR is an optional hashref which may contain a single entry for \f(CW\*(C`rebless\*(C'\fR. If the value for \f(CW\*(C`rebless\*(C'\fR is true, when a blessed subroutine is wrapped, the wrapper will be blessed into the same package.