in reply to Re^7: What esteemed monks think about changes necessary/desirable in Perl 7 outside of OO staff
in thread What esteemed monks think about changes necessary/desirable in Perl 7 outside of OO staff
No elegant alternative. As I showed in the benchmark, this works fine:The most elegant approach to this problem is the use of tr function. The implementation below beats regex three times and can be made faster by trivial extension of tr function mentioned in my prev post (something like option 'x' -- stop the translation on the first symbol outside the set1 and return this position), which can be used instead of more general function index for searching single characters in the string and can made like rindex to be able to search in reverse direction too.sub splt{split" ",reverse((split" ",(reverse$x),1)[0]),1;};
Looks like the solution for trim from the Cookbook mentioned by Fletch along with potentially deforming the string is slower then regex in my test(on my machine it took 3.56 sec real time).
Here is the "tr based" algorithm for trim:
time perl -e 'for (1..1000000) { $line=" aaa bbb ccc ddd eee fff "; $_=$line; $_=~tr/ /x/c; $start=index($_,'x'); $line=substr($line,$start,rindex($_,'x')-$start+1); }' real 0m1.112s user 0m1.076s sys 0m0.031sCan be made into a single statement making it slightly( ~7%) slower:
$line=substr($line,($start=index($_=$line=~tr/ /x/cr,'x')),rindex($_,'x')-$start+1); # time perl -e 'for (1..1000000) { $line=" aaa bbb ccc ddd eee fff "; $line=substr($line,($start=index($_=$line=~tr/ /x/cr,'x')),rindex($_,'x')-$start+1); }' real 0m1.189s user 0m1.154s sys 0m0.015s
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^9: What esteemed monks think about changes necessary/desirable in Perl 7 outside of OO staff
by likbez (Sexton) on Sep 16, 2020 at 13:45 UTC | |
by Tux (Canon) on Sep 16, 2020 at 14:23 UTC | |
by choroba (Cardinal) on Sep 16, 2020 at 14:04 UTC | |
by likbez (Sexton) on Sep 16, 2020 at 15:10 UTC | |
by choroba (Cardinal) on Sep 16, 2020 at 15:12 UTC |
In Section
Meditations