C:\test>\perl5.18\bin\perl.exe 1046579.pl -N=2**20 Rate classic translate str classic 482/s -- -30% -34% translate 688/s 43% -- -6% str 730/s 52% 6% -- C:\test>\perl5.18\bin\perl.exe 1046579.pl -N=2**29 Rate classic str translate classic 0.945/s -- -21% -26% str 1.20/s 27% -- -6% translate 1.27/s 35% 6% -- C:\test>\perl5.18\bin\perl.exe 1046579.pl -N=2**30 s/iter classic str translate classic 2.06 -- -19% -26% str 1.68 23% -- -9% translate 1.53 35% 10% -- C:\test>\perl5.18\bin\perl.exe 1046579.pl -N=2**31 s/iter str classic translate str 3.97 -- -7% -23% classic 3.69 8% -- -17% translate 3.06 30% 20% -- #### C:\test>perl -MO=Concise,str 1046579.pl main::str: 13 <1> leavesub[1 ref] K/REFC,1 ->(end) - <@> lineseq KP ->13 1 <;> nextstate(main 1250 1046579.pl:50) v:*,&,$ ->2 4 <2> sassign vKS/2 ->5 2 <$> const[IV 10000] s ->3 3 <0> padsv[$blocksize:1250,1258] sRM*/LVINTRO ->4 5 <;> nextstate(main 1252 1046579.pl:51) v:*,&,$ ->6 a <2> sassign vKS/2 ->b 8 <1> length[t4] sK/1 ->9 7 <1> rv2sv sK/3 ->8 - <@> scope sK ->7 - <0> ex-nextstate v ->6 - <1> ex-aelem sK/2 ->- - <1> ex-rv2av sKR/3 ->- 6 <#> aelemfast[*_] s ->7 - <0> ex-const s ->- 9 <0> padsv[$lb:1252,1258] sRM*/LVINTRO ->a b <;> nextstate(main 1253 1046579.pl:52) v:*,&,{,$ ->c e <2> sassign vKS/2 ->f c <$> const[IV 0] s ->d d <0> padsv[$offset:1253,1258] sRM*/LVINTRO ->e f <;> nextstate(main 1257 1046579.pl:53) v:*,&,{,$ ->g 12 <2> leaveloop K/2 ->13 g <{> enterloop(next->x last->12 redo->h) ->y - <1> null K/1 ->12 11 <|> and(other->h) K/1 ->12 10 <2> lt sK/2 ->11 y <0> padsv[$offset:1253,1258] s ->z z <0> padsv[$lb:1252,1258] s ->10 - <@> lineseq sKP ->- h <;> nextstate(main 1256 1046579.pl:55) v:*,&,$ ->i s <@> substr[t10] vK/4 ->t - <0> ex-pushmark s ->- j <1> rv2sv sKM/3 ->k - <@> scope sK ->j - <0> ex-nextstate v ->i - <1> ex-aelem sK/2 ->- - <1> ex-rv2av sKR/3 ->- i <#> aelemfast[*_] s ->j - <0> ex-const s ->- k <0> padsv[$offset:1253,1258] s ->l l <0> padsv[$blocksize:1250,1258] s ->m r <1> complement[t9] sK ->s q <@> substr[t8] sK/3 ->r - <0> ex-pushmark s ->- n <1> rv2sv sK/3 ->o - <@> scope sK ->n - <0> ex-nextstate v ->m - <1> ex-aelem sK/2 ->- - <1> ex-rv2av sKR/3 ->- m <#> aelemfast[*_] s ->n - <0> ex-const s ->- o <0> padsv[$offset:1253,1258] s ->p p <0> padsv[$blocksize:1250,1258] s ->q t <;> nextstate(main 1256 1046579.pl:56) v:*,&,$ ->u w <2> add[t11] vKS/2 ->x u <0> padsv[$offset:1253,1258] sRM ->v v <0> padsv[$blocksize:1250,1258] s ->w x <0> unstack s ->y 1046579.pl syntax OK #### C:\test>perl -MO=Concise,translate 1046579.pl main::translate: 8 <1> leavesub[1 ref] K/REFC,1 ->(end) - <@> lineseq KP ->8 1 <;> nextstate(main 1267 (eval 7):1) v:*,&,{,$ ->2 - <1> null KS/2 ->- 6 <1> rv2sv sKRM/3 ->7 - <@> scope sK ->6 - <0> ex-nextstate v ->2 5 <2> aelem sKM/DREFSV,2 ->6 3 <1> rv2av sKR/3 ->4 2 <#> gv[*_] s ->3 4 <$> const[IV 0] s ->5 7 <"> trans sS/COMPL ->8 1046579.pl syntax OK #### C:\test>\perl5.18\bin\perl.exe 1046579.pl -N=2**29 s/iter long classic str translate long 3.92 -- -74% -78% -81% classic 1.03 282% -- -17% -29% str 0.847 363% 21% -- -14% translate 0.731 436% 40% 16% -- C:\test>\perl5.18\bin\perl.exe 1046579.pl -N=2**30 Substitution loop at 1046579.pl line 42.