in reply to Re: doing tr/// on-the-fly?
in thread doing tr/// on-the-fly?

Extending this to get the number of substitutions...
my $result; eval "\$result = \$s =~ tr/$search/$replace/";
Also, the OP would have gotten warning messages with use warnings;

Replies are listed 'Best First'.
Re^3: doing tr/// on-the-fly?
by Anonymous Monk on Mar 18, 2010 at 01:37 UTC

    Thanks. That is useful information to have.

    Any information on CPAN modules to use for escaping? It would really help if something were installed by default. :)

      Dynamic tr is kind of nonsensical, just use s///, it will be just as fast
        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% --

        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.