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;