I'm still at it! I'm using func=`0` to compute a "baseline" (overhead) time which is subtracted from all the times. IMHO, this gives a more meaningful comparison of the various functions. Below, notice the difference in the pairs of functions I=6,7 and I=8,9. It's the difference between a numeric comparison and a string comparison (and it's significant). Quoting gives a string comparison, apparently saving the conversion of the parameters to numbers (and, since the strings in question are one character long, the comparison goes pretty quickly).
Code:
TIME IN SECONDS
I FUNCTION GROSS NET
0 `0` 1.297 0.000
1 `%@instr[%1,1,01000001]` 1.396 0.099
2 `%@index[17,%1,0]` 1.390 0.093
3 `%@regex[[17],%1]` 1.403 0.106
4 `%@eval[1-(301 MOD %1)]` 1.669 0.372
5 `%@eval[abs(%1-4)\3]` 1.718 0.421
6 `%@if[%1==1 .OR. %1==7,1,0]` 1.840 0.543
7 `%@if["%1"=="1" .OR. "%1"=="7",1,0]` 1.555 0.258
8 `%@if[%@eval[%1 mod 6] == 1,1,0]` 1.937 0.640
9 `%@if["%@eval[%1 mod 6]" == "1",1,0]` 1.771 0.474