Acme-Lelek

 view release on metacpan or  search on metacpan

lib/Acme/Lelek.pm  view on Meta::CPAN

}

# ABSTRACT: encode/decode text to lelek code.
use autobox::Core;
use Convert::BaseN;
use Const::Fast;
use Moo;

const my $lek_re => qr/^lek$/i;
const my @leks   => qw(lek leK lEk Lek lEK LeK LEk LEK);
const my %octals => map { $leks[$_] => $_ } 0 .. 7;

has base8 => (
    is       => 'ro',
    required => 1,
    default  => sub {
        Convert::BaseN->new( base => 8 );
    }
);

sub encode {
    my ( $self, $msg ) = @_;

    $self->base8->encode($msg)->split('')->grep(qr/[0-7]/)
      ->map( sub { $leks[$_] } )->unshift('AH Le')->join(' ');
}

sub decode {
    my ( $self, $msg ) = @_;

    $self->base8->decode(
        $msg->split(qr/\s+/)->grep($lek_re)->map(
            sub {
                $octals{$_};
            }
          )->join('')
    );
}

1;

__END__



( run in 0.884 second using v1.01-cache-2.11-cpan-49f99fa48dc )