in reply to Re^4: doing tr/// on-the-fly?
in thread doing tr/// on-the-fly?
just use s///, it will be just as fast
Not even close:
$from = 'abcd'; $to = '1234';; @t = map 'axbxcxdx' x 10, 1 .. 1000;; cmpthese -1, { tr => q[ my $tr = eval "sub{ \$_[0] =~ tr[$from][$to] }"; $tr->( $_ ) for @{[ @t ]}; ], s => q[ my %tr; @tr{ split'', $from } = split'', $to; s[([$from])]{ $tr{$1} }eg for @{[@t]} ], };; Rate s tr s 32.0/s -- -97% tr 1054/s 3189% -- @t = map 'axbxcxdx' x 1000, 1 .. 1000;; cmpthese -1, { tr => q[ my $tr = eval "sub{ \$_[0] =~ tr[$from][$to] }"; $tr->( $_ ) for @{[ @t ]}; ], s => q[ my %tr; @tr{ split'', $from } = split'', $to; s[([$from])]{ $tr{$1} }eg for @{[@t]} ], };; (warning: too few iterations for a reliable count) s/iter s tr s 2.65 -- -99% tr 1.98e-002 13317% --
|
|---|