fork download
  1. #!/usr/bin/perl
  2. @t = ('A'..'Z','a'..'z','0'..'9','+','-');
  3. sub encode {
  4. $a = $_[0];
  5. $f = 'B8' x length $a;
  6. $b = join '', unpack $f, $a;
  7. @c = map{$t[eval"0b$_"]} "${b}0000" =~ /(.{6})/g;
  8. join('', @c) . '=' x (@c % 4);
  9. }
  10.  
  11. %t = map{$_ => $i++} @t;
  12. sub decode {
  13. ($a = $_[0]) =~ s/=*$//;
  14. $b = join '', map{sprintf'%06b',$t{$_}} split '', $a;
  15. @b = $b =~ /(.{8})/g;
  16. pack 'B8' x @b, @b;
  17. }
  18.  
  19. # ASCII Text string test case
  20. use feature 'say';
  21. $_ = 'ABCDEFG';
  22. say;
  23. $e = encode $_;
  24. say $e;
  25. say decode $e;
  26. # Binary Byte array test case
  27. $_ = pack 'H2'x7, 12,'AB',34,'CD',56,'EF',78;
  28. say unpack 'H*', $_;
  29. $e = encode $_;
  30. say $e;
  31. say unpack 'H*', decode $e;
Success #stdin #stdout 0.01s 4568KB
stdin
Standard input is empty
stdout
ABCDEFG
QUJDREVGRw==
ABCDEFG
12ab34cd56ef78
Eqs0zVbveA==
12ab34cd56ef78