Acme-Text-Viceversa

 view release on metacpan or  search on metacpan

lib/Acme/Text/Viceversa.pm  view on Meta::CPAN

    q|V| => 'Λ',
    q|W| => 'M',
    q|X| => 'X',    # same!
    q|Y| => 'â…„',
    q|Z| => 'Z',    # same!
    q|]| => '[',
    q|\\| => '\\',    # same!
    q|[| => ']',
    q|^| => '‿',
    q|_| => '‾',

    q|`| => ' ̖',   #` # ɓuᴉʇɥɓᴉꞁɥɓᴉɥ xɐʇuʎs pᴉoʌɐ oʇ
    q|a| => 'ɐ',
    q|b| => 'q',
    q|c| => 'É”',
    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ɥʇǝɯ



( run in 1.268 second using v1.01-cache-2.11-cpan-140bd7fdf52 )