-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hello,

I'm developing a perl yenc encoder but unfortunatelly it's not having
the performance i was expecting to have (and it's CPU heavy).

Can i get some help improving it's performance?

This is the code i have (41 lines).

Initially i though about memoize it, but unfortunately i don't think
it's possible.

Replacing the for loop with a map, would be a good option? Does anybody
has any idea to improve it's performance?


 
Regards,
David Santiago


CODE: The following function receives a binary string.

####

my @YENC_CHAR_MAP = map{($_+42)%256;} (0..0xffff);
my $YENC_NNTP_LINESIZE=128;

sub _yenc_encode{
  my ($string) = @_;
  my $column = 0;
  my $content = '';

  my @hexString = unpack('W*',$string); #Converts binary string to hex
 
  for my $hexChar (@hexString) {
    my $char= $YENC_CHAR_MAP[$hexChar];

        #null || LF || CR || =
    if ($char == 0 || $char == 10 || $char == 13 || $char == 61 ||

        # TAB || SPC
        (($char == 9 || $char == 32) && ($column == $YENC_NNTP_LINESIZE
        || $column==0)) || 

        ($char==46 && $column==0) # . 
        ) {
      
      $content =$content. '=';
      $column+=1;
      
      $char=($char + 64);#%256;
    }

    $content = $content.chr $char;
    
    $column+=1;
    
    if ($column>= $YENC_NNTP_LINESIZE ) {
      $column=0;
      $content = $content."\r\n";
    }

  }

  return $content;
}

####

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQEcBAEBCAAGBQJVuoW/AAoJEJ/OLjwuDYzKvMcH/2Q2B1p3L+Q/iPvjfeTNoQfX
V+MsLkSelzjl/rKKRnYgYerHacaTpWxy6sKKnSlTQy2c2XXIXOLLxKZxHjw869bA
hwnlKrl2UnABekJF270J7wIk0K6+zw1BTjHjcPlibfBPTCX6lOoaO0PHy5cHycXC
XQ3+Pjo3e7Ux7dx16vFJq/XJl70LmV5CFShvQoLRtSV3fxvOEE25uGzRm6zCEVSd
cEISGgLXBHwzvpU5+ma4SIuXDcYWDpfNOUukPF7zLHtn+WEjr/CImcM75MvnjUtg
CZn9SIwgOeeNZ22T5SbOitX5uhqyFGOln8Y8DOcHjTCKTD1uem//IclcqZUrXBU=
=r+/T
-----END PGP SIGNATURE-----

Reply via email to