package Foo; use strict; use warnings; use Carp; my %subs = ( subA => _gen_tr('abc' => 'xyz'), subB => _gen_tr('ijk' => 'qrs'), ); $subs{reverse($_)} = $subs{$_} for keys %subs; # Stand-in example for aliases no strict 'refs'; *$_ = $subs{$_} for keys %subs; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = keys %subs; sub _gen_tr { /^\w+$/ or confess "Non-word characters in argument: <$_>" for @_; eval "sub { shift =~ tr/$_[0]/$_[1]/r }" } 1; #### use Exporter::Easy ( OK => [ keys %subs ], TAGS => [ all => [ keys %subs ], ], ); #### use strict; use warnings; use Test::More; # Pick one: #use Foo qw/subA subB Abus Bbus/; use Foo ':all'; is subA('abra-cadabra'), 'xyrx-zxdxyrx'; is subB('i like stuff'), 'q lqse stuff'; is Abus('abra-cadabra'), 'xyrx-zxdxyrx'; is Bbus('i like stuff'), 'q lqse stuff'; done_testing;