That makes me wonder - what version of Perl are you using and on which OS? Here's what I get:
$ perl -v This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level (with 2 registered patches, see perl -V for more detail) On Fri, Jul 31, 2015 at 12:39 PM, David Emanuel da Costa Santiago < deman...@gmail.com> wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA256 > > > > Hello. > > > Thanks for your reply. > > > I remember that i did some performance tests and > > $string = $string ."something" > > had better performance than > > $string .= "something" > > which matched the results of (link to stack overflow) > http://stackoverflow.com/questions/3104493/performance-with-perl-strings > > > I'm going to try your suggestions an i will report back. > > > > Best regards, > David Santiago > > > > > Em Thu, 30 Jul 2015 16:56:31 -0400 > Uri Guttman <u...@stemsystems.com> escreveu: > > > On 07/30/2015 04:14 PM, David Emanuel da Costa Santiago wrote: > > > > > > 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]; > > > > > when checking multiple values like this use a hash. it will be > > quicker than all those == ops. or even a array using ord() for the > > index. you can populate it outside the sub like this: > > > > my @is_special ; > > $is_special[0] = 1 ; # NUL > > $is_special[10] = 1 ; #LF > > > #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) # . > > then a single check will do: > > > > if ( $is_special[$char] && blah blah ) { > > > > > > > ) { > > > > > > $content =$content. '='; > > ever heard of .=? it is one of my favorite perl ops. it just means > > append. building strings is best done with .=. in fact a rule i use > > is for one sub to build some result string but its caller decides > > what to do with it. that way you can print, log, email, whatever to > > the string and not change the builder code. output should be done > > only when you have the full result as then you can decide what to do > > with the result. too often you see code where text is generated and > > output immediately. when they need to fork the output they have to > > resort to tied handles and other wacky stuff. the rule to remember is > > > > print rarely, print late. > > > $column+=1; > > > > > $column++ ; > > > $char=($char + 64);#%256; > > you used += before so why not there too? > > > > also use more horizontal white space to make your code easier to read. > > > } > > > > > > $content = $content.chr $char; > > like that looks like a .method call but perl doesn't use that > > syntax. .= is the win here again. > > > > > > $column+=1; > > > > > > if ($column>= $YENC_NNTP_LINESIZE ) { > > you can merge thos two lines: > > if( ++$column >= $YENC_NNTP_LINESIZE ) { > > > $column=0; > > > $content = $content."\r\n"; > > .= again. see how common its usage is? because it is a assignment op > > which some newbies don't learn early on, it is missed. it is just > > append and simple and very needed in almost all code that builds up > > text. > > > > uri > > > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v2 > > iQEcBAEBCAAGBQJVu158AAoJEJ/OLjwuDYzKOoYH/2SAEQJu2q0j6fcGywhKV+kA > KGOWgtVSCgwiTQyVDqhrOI2EJr2PSW/7/iwVB7pMdVI1OrFsJyH+q0YoGbWMV9Mf > sl6nONanVGobdF/B1liDtdGchr6UtoO2QK5Elz2PWjtHiC2zgQEw2qYw+p72EJtW > 4dXA7QdmtXyiABby3WcZr1mZ1D8SbqUtiJ48DWjcR1hA7mAcz8Erda9hm8jT+L5J > yiviE1gieA6BUXT2Ri6VzqX7/ScUO0JVTpHkqu2IGIzaXuqqV7kkOuihCwhN30EB > vV1Dt/WFcsdD/c3KFB4il/HBZxPfiY5/gHDTcsOn4fkqj6xy+qFs0p9vpIwvux0= > =SGdA > -----END PGP SIGNATURE----- > -- Andrew Solomon Mentor@Geekuni http://geekuni.com/ http://www.linkedin.com/in/asolomon