ExportTo - export any function/method to any namespace
Version 0.03
package From; sub function_1{ # ... } sub function_2{ # ... } sub function_3{ # ... } use ExportTo (NameSpace1 => [qw/function_1 function_2/], NameSpace2 => [qw/function_3/]); # Now, function_1 and function_2 are exported to 'NameSpace1' namespace. # function_3 is exported to 'NameSpace2' namespace. # If 'NameSpace1'/'NameSpace2' namespace has same name function/method, # such a function/method is not exported and ExportTo croaks. # but if you want to override, you can do it as following. use ExportTo (NameSpace1 => [qw/+function_1 function_2/]); # if adding + to function/method name, # This override function/method which namespace already has with exported function/method. use ExportTo ('+NameSpace' => [qw/function_1 function_2/]); # if you add + to namespace name, all functions are exported even if namespace already has function/method. use ExportTo ('+NameSpace' => {function_ => sub{print 1}, function_2 => 'function_2'}); # if using hashref instead of arrayref, its key is regarded as subroutine name and # value is regarded as its coderef/subroutine name. and this subroutine name will be exported.
This module allow you to export/override subroutine/method to one namespace. It can be used for mix-in, for extension of modules not using inheritance.
# example 1 & 2 export_to(PACKAGE_NAME => [qw/FUNCTION_NAME/]); ExportTo->export_to(PACKAGE_NAME => [qw/FUNCTION_NAME/]); # example 3 ExportTo->export_to(PACKAGE_NAME => {SUBROUTINE_NAME => sub{ .... }, SUBROUTINE_NAME2 => 'FUNCTION_NAME'});
These are as same as following.
# example 1 & 2 use ExportTo(PACKAGE_NAME => [qw/FUNCTION_NAME/]); # example 3 use ExportTo(PACKAGE_NAME => {SUBROUTINE_NAME => sub{ .... }, SUBROUTINE_NAME2 => 'FUNCTION_NAME'});
But, 'use' is needed to declare after declaration of function/method. using 'export_to', you can write anywhere.
This is used in Util::Any. For example, CGI::Util's escape function to other package.
escape
package main; use CGI (); # export CGI::Util::escape to OtherA use ExportTo (OtherA => ['CGI::Util::escape']); # export CGI::Util::escape to OtherB as cgi_escape use ExportTo (OtherB => {cgi_escape => \&CGI::Util::escape}); print OtherA::escape("/"); # %2F print OtherB::cgi_escape("/"); # %2F
It is as same as above.
use CGI (); # export CGI::Util::escape to current package use ExportTo (__PACKAGE__, ['CGI::Util::escape']); # export CGI::Util::escape to current package as cgi_escape use ExportTo (__PACKAGE__, {cgi_escape => \&CGI::Util::escape}); print main::escape("/"); # %2F print main::cgi_escape("/"); # %2F
But for this purpose, Sub::Import has better interface.
Ktat, <ktat at cpan.org>
<ktat at cpan.org>
Please report any bugs or feature requests to bug-exportto at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=ExportTo. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
bug-exportto at rt.cpan.org
You can find documentation for this module with the perldoc command.
perldoc ExportTo
You can also look for information at:
AnnoCPAN: Annotated CPAN documentation
http://annocpan.org/dist/ExportTo
CPAN Ratings
http://cpanratings.perl.org/d/ExportTo
RT: CPAN's request tracker
http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExportTo
Search CPAN
http://search.cpan.org/dist/ExportTo
Sub::Import. If you import other module's function to current package, it is better than ExportTo.
Copyright 2006-2009 Ktat, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install ExportTo, copy and paste the appropriate command in to your terminal.
cpanm
cpanm ExportTo
CPAN shell
perl -MCPAN -e shell install ExportTo
For more information on module installation, please visit the detailed CPAN module installation guide.