Acme-Text-Viceversa
view release on metacpan or search on metacpan
lib/Acme/Text/Viceversa.pm view on Meta::CPAN
package Acme::Text::Viceversa;
use 5.008001;
use strict;
use warnings;
use Carp;
use utf8;
our $VERSION = "0.07";
sub new {
my $class = shift;
return bless {}, $class;
}
my %ascii = (
q' ' => ' ', # same!
q'!' => '¡',
q'"' => 'â',
q'#' => '#', # same!
q'$' => '$', # same!
q'%' => '%', # same!
q'&' => 'â
',
q|'| => '͵',
q|(| => ')',
q|)| => '(',
q|*| => '*', # same!
q|+| => '+', # same!
q|,| => 'â',
q|-| => '-', # same!
q|.| => 'Ë',
q|/| => '/', # same!
q|0| => '0', # same!
q|1| => 'â',
q|2| => 'á',
q|3| => 'ε',
q|4| => 'ââ',
q|5| => 'á',
q|6| => '9',
q|7| => 'L',
q|8| => '8', # same!
q|9| => '6',
q|:| => ':', # same!
q|;| => 'â
Ì',
q|<| => '>',
q|=| => '=', # same!
q|>| => '<',
q|?| => '¿',
q|@| => '@', # Can't be rotate
q|A| => 'â',
q|B| => 'áº',
q|C| => 'â',
q|D| => 'p',
q|E| => 'Æ',
q|F| => 'â²',
q|G| => 'â
',
q|H| => 'H', # same!
q|I| => 'I', # same!
q|J| => 'á',
q|K| => '丬',
q|L| => 'á£',
q|M| => 'W',
q|N| => 'N', # same!
q|O| => 'O', # same!
lib/Acme/Text/Viceversa.pm view on Meta::CPAN
q|d| => 'p',
q|e| => 'Ç',
q|f| => 'É',
q|g| => 'É',
q|h| => 'É¥',
q|i| => 'á´',
q|j| => 'ſ̣',
q|k| => 'Ê',
q|l| => 'ê',
q|m| => 'ɯ',
q|n| => 'u',
q|o| => 'o', # same!
q|p| => 'd',
q|q| => 'b',
q|r| => 'ɹ',
q|s| => 's', # same!
q|t| => 'Ê',
q|u| => 'n',
q|v| => 'Ê',
q|w| => 'Ê',
q|x| => 'x', # same!
q|y| => 'Ê',
q|z| => 'z', # same!
q|{| => '}',
q{|} => '|', # same!
q|}| => '{',
q|~| => 'â¼', # same!
);
my %rot180 = %ascii;
my $list = '';
while( my( $from, $to ) = each %ascii ){ # to make reversed list
next if $to =~ /^[ -~]$/; # skip if it was an ascii
$rot180{$to} = $from; # add reversed key
$list .= $to; # add the charactors to the list
}
$list = "\Q" . $list;
sub ÉsɹÇÊÇÉá´Ê {
my $self = shift;
my $str = shift;
$str =~ s/\r\n/\n/g;
my @results = ();
foreach ( split "\n", $str ) {
my @result = reverse map{ $self->ÇÊÉÊoɹ($_) } split /\s/, $_;
unshift @results, join " ", @result;
}
return join "\n", @results;
}
sub ÇÊÉÊoɹ {
my $self = shift;
my $str = shift;
croak $self->ÇÊÉÊoɹ( __PACKAGE__ . " accepts only ascii and their upset." )
unless $str =~ /^(:?[ -~$list]+)$/o;
my @results = ();
my $string = '';
my $buffer = '';
while ( $string = substr( $str, 0, 1, '' ) or $string eq '0' ){
# some charactors have length 2 even if they were under utf8
if( exists $rot180{$string} ) {
unshift @results, $rot180{$string};
$buffer = '';
}else{
$buffer .= $string;
next unless exists $rot180{$buffer};
unshift @results, $rot180{$buffer};
$buffer = '';
}
}
return join "", @results;
}
1;
__END__
=encoding utf-8
=head1 ATENTION
You have to twist your neck to read this document.
Don't turn your display, it is the sliest way for me.
=head1 NAME
ÊxÇÊ ÇÉ¥Ê ÊÇsdn Êsná - ÉsɹÇÊÇÉá´Î::ÊxÇâ¥::ÇɯÉâ
=head1 SYNOPSIS
text that you want to make upset #
â
Ì(͵ÊÇsdn ÇÊÉɯ oÊ ÊuÉÊ noÊ ÊÉÉ¥Ê ÊxÇÊ͵)viceversa<-Ê$ = ÊÇsdn$ Êɯ
â
Ì()ÊÇu<-ÉsɹÇÊÇÉá´Î::ÊxÇâ¥::ÇɯÉâ = Ê$ Êɯ
â
ÌÉsɹÇÊÇÉá´Î::ÊxÇâ¥::ÇɯÉâ Çsn
=head1 DESCRIPTION
=head2 ɹoÊÉnɹÊsuoÉ
=head3 ()ÊÇu
ËpÇɹá´nbÇɹ sá´ Éuá´É¥Êou ËɹoÊÉnɹÊsuoÉ É Êsnſ̣
=head2 spoÉ¥ÊÇɯ
=head3 (É¥dÉɹÉÉɹÉd$)viceversa
sÇpá´Êoɹd Çênpoɯ sá´É¥Ê ÊÉÉ¥Ê uoá´ÊÉunÉ Êêuo ÇÉ¥Ê sá´ sá´É¥Ê Ëá´á´ÉsÉ uᴠɥdÉɹÉÉɹÉd ÊuÉ ÊÇsdn ÊêÊÉÇɹɹoÉ
=head1 AUTHOR
E<lt>ɯoÉËêá´ÉɯÉ@Çuá´É¯É¥ÊɹoÊE<gt> (Çuá´É¯É¥ÊɹoÊ)Épá´É¥soâ
á´Ênâ
=head1 LICENSE
ËÉêÇsÊá´ êɹÇÔ sÉ sɯɹÇÊ ÇɯÉs ÇÉ¥Ê É¹Çpun Êá´ ÊÉá´poɯ ɹo/puÉ Êá´ ÇÊnqá´É¹Êsá´pÇɹ uÉÉ noÊ E<039>ÇɹÉÊÊÉos ÇÇÉ¹É sá´ ÊɹÉɹqá´ê sá´É¥â¥
ËÉpá´É¥soâ
á´Ênâ
(â) ÊÉ¥Éá´É¹Êdoâ
( run in 2.387 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )