Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
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".


Comment on Infinite Recursion of a String
Select or Download Code
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 musing on the Monastery: (17)
As of 2015-07-31 14:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (278 votes), past polls