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

Infinite Recursion of a String

by tadman (Prior)
on Feb 07, 2001 at 00:30 UTC ( #56773=note: print w/replies, xml ) Need Help??


in reply to RE: Double Interpolation of a String
in thread Double Interpolation of a String

With inspiration from davorg's above example, taking it a step further (and a step further (and a step further (...))):
#!/usr/bin/perl -w use strict; my %trans = ( '$name' => 'Frank', '$color' => 'Cherry Red', '$time' => sprintf ("%d:%02d:%02d", (localtime(time))[2,1,0]), '$date' => sprintf ("%04d-%02d-%02d", (localtime(time))[5] + 1900, (localtime(time))[4] + 1, (localtime(time))[3]), '$dstr' => '$time on $date', ); my ($trans_rx) = join ('|', sort { length($b) - length($a) } sort map { quotemeta ($_) } keys %trans); my ($string) = 'I\'m $name and I prefer $color objects, at least +on $dstr'; while ($string =~ s!($trans_rx)!$trans{$1}!o) { } print "$string\n";
For output like:
I'm Frank and I prefer Cherry Red objects, at least on 15:33:43 o +n 2001-02-06
This version doesn't replace stray references to things like $1.95 with nothing, but it might get caught in a loop if you specify two entries which convert to eachother recursively such that "$a -> $b" and "$b -> $a".

Replies are listed 'Best First'.
Re: Infinite Recursion of a String
by Fastolfe (Vicar) on Feb 07, 2001 at 00:34 UTC
    It might be useful to protect against infinite recursion as well:
    my $max_recurs = 10; $max_recurs-- while $string =~ ... && $max_recurs; warn "Too many recursive substitutions on '$string'" if !$max_recurs && $^W;

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://56773]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (3)
As of 2016-10-01 22:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    How many different varieties (color, size, etc) of socks do you have in your sock drawer?






    Results (9 votes). Check out past polls.