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.