#!/usr/bin/perl
@t = ('A'..'Z','a'..'z','0'..'9','+','-');
sub encode {
$a = $_[0];
@c = map{$t[eval"0b$_"]} "${b}0000" =~ /(.{6})/g; join('', @c) . '=' x
(@c % 4); }
sub decode {
($a = $_[0]) =~ s/=*$//;
@b = $b =~ /(.{8})/g;
}
# ASCII Text string test case
use feature 'say';
$_ = 'ABCDEFG';
say;
$e = encode $_;
say $e;
say decode $e;
# Binary Byte array test case
$_ = pack 'H2'x7
, 12,'AB',34,'CD',56,'EF',78; $e = encode $_;
say $e;
IyEvdXNyL2Jpbi9wZXJsCkB0ID0gKCdBJy4uJ1onLCdhJy4uJ3onLCcwJy4uJzknLCcrJywnLScpOwpzdWIgZW5jb2RlIHsKICAkYSA9ICRfWzBdOwogICRmID0gJ0I4JyB4IGxlbmd0aCAkYTsKICAkYiA9IGpvaW4gJycsIHVucGFjayAkZiwgJGE7CiAgQGMgPSBtYXB7JHRbZXZhbCIwYiRfIl19ICIke2J9MDAwMCIgPX4gLyguezZ9KS9nOwogIGpvaW4oJycsIEBjKSAuICc9JyB4IChAYyAlIDQpOwp9CgoldCA9IG1hcHskXyA9PiAkaSsrfSBAdDsKc3ViIGRlY29kZSB7CiAgKCRhID0gJF9bMF0pID1+IHMvPSokLy87CiAgJGIgPSBqb2luICcnLCBtYXB7c3ByaW50ZiclMDZiJywkdHskX319IHNwbGl0ICcnLCAkYTsKICBAYiA9ICAkYiA9fiAvKC57OH0pL2c7CiAgcGFjayAnQjgnIHggQGIsIEBiOwp9CgojIEFTQ0lJIFRleHQgc3RyaW5nIHRlc3QgY2FzZQp1c2UgZmVhdHVyZSAnc2F5JzsKJF8gPSAnQUJDREVGRyc7CnNheTsKJGUgPSBlbmNvZGUgJF87CnNheSAkZTsKc2F5IGRlY29kZSAkZTsKIyBCaW5hcnkgQnl0ZSBhcnJheSB0ZXN0IGNhc2UKJF8gPSBwYWNrICdIMid4NywgMTIsJ0FCJywzNCwnQ0QnLDU2LCdFRicsNzg7CnNheSB1bnBhY2sgJ0gqJywgJF87CiRlID0gZW5jb2RlICRfOwpzYXkgJGU7CnNheSB1bnBhY2sgJ0gqJywgZGVjb2RlICRlOw==