Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re^3: How to use a variable in tr///

by merlyn (Sage)
on Apr 08, 2005 at 12:43 UTC ( #446003=note: print w/replies, xml ) Need Help??


in reply to Re^2: How to use a variable in tr///
in thread How to use a variable in tr///

why not just eval?
Because with eval, you must worry about delimiters. For example, if either string had contained "/", the eval example given elsewhere in this thread would fail. Also, eval invites disaster in a proxy-privilege environment (like CGI or other daemons).

The lookup table isn't hard to create:

## initialization my $old = 'abc'; my $new = 'xyz'; my %table; @table{split //, $old} = split //, $new; my $table_re = join '|', map quotemeta reverse sort keys %table; ## the deed my $string = 'abracadabra'; $string =~ s/($table_re)/$table{$1}/g;

-- Randal L. Schwartz, Perl hacker
Be sure to read my standard disclaimer if this is a reply.

Replies are listed 'Best First'.
Re^4: How to use a variable in tr///
by Roy Johnson (Monsignor) on Apr 08, 2005 at 12:49 UTC
    The "why not just eval?" referred to the case of embedding an eval'd tr/// in an s///e, which would be no better. But your cautions are valid. [Update: and addressed here]

    Update:
    Though for character replacement, I'd build the regex using a character class rather than alternation:

    my $table_re = sprintf '[%s]', join '', map quotemeta, keys %table;

    Caution: Contents may have been coded under pressure.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://446003]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (1)
As of 2018-07-22 05:06 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?















    Results (451 votes). Check out past polls.

    Notices?