package Text::Transliterator; use strict; use warnings; our $VERSION = '1.03'; sub new { my $class = shift; my ($from, $to); # first arguments : either a hashref, or a pair of strings if ((ref $_[0] || '') eq 'HASH') { my $map = shift; $from = join "", keys %$map; $to = join "", values %$map; } else { $from = shift; $to = shift; defined $from and defined $to or die 'Text::Transliterator->new($from, $to): invalid args'; } # remaining arguments my $modifiers = shift || ''; not @_ or die 'Text::Transliterator->new(): too many args'; # build the coderef my $src = "sub {tr[$from][$to]$modifiers for \@_ }"; local $@; my $coderef = eval $src or die $@; return $coderef; } 1; # End of Text::Transliterator __END__ =head1 NAME Text::Transliterator - Wrapper around Perl tr/../../ operator =head1 SYNOPSIS my $tr = Text::Transliterator->new($from, $to, $modifiers); # or my $tr = Text::Transliterator->new(\%map, $modifiers); $tr->(@strings); =head1 DESCRIPTION This package is a simple wrapper around Perl's transliteration operator C. Starting either from two strings of characters, or from a map of characters, it will compile a function that applies the transliteration to any list of strings. This does very little work, and therefore would barely merit a module on its own; it was written mainly for serving as a base package for L. However, in some situations it may be useful in its own right, since Perl has no construct similar to C for "compiling" a transliteration. As a matter of fact, the C documentation says "if you want to use variables, you must use an eval()" ... which is what the present module does, albeit in a somewhat more controlled way. =head1 METHODS =head2 new my $tr = Text::Transliterator->new($from, $to, $modifiers); # or my $tr = Text::Transliterator->new(\%map, $modifiers); Creates a new transliterator function. In the first syntax, the arguments are two strings that will be passed directly to the C operator (see L), i.e. a string of characters to be replaced, and a string of replacement characters. The third argument C<$modifiers> is optional and may contain a string with any combination of the C modifiers to the C operator. In the second syntax, the argument is a hashref, in which keys are the characters to be replaced, and values are the replacement characters. Optional C<$modifiers> are as above. The return value from that C method is actually a reference to a function, not an object. That function is called as $tr->(@strings); and modifies every member of C<@strings> I, like the C operator. The return value is the number of transliterated characters in the last member of C<@strings>. =head1 AUTHOR Laurent Dami, C<< >> =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc Text::Transliterator You can also look for information at: =over 4 =item * RT: CPAN's request tracker L =item * AnnoCPAN: Annotated CPAN documentation L =item * CPAN Ratings L =item * Search CPAN L =back =head1 LICENSE AND COPYRIGHT Copyright 2010, 2017 Laurent Dami. This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information. =cut