http://qs1969.pair.com?node_id=718936

brycen has asked for the wisdom of the Perl Monks concerning the following question:

Dear Monks, Is there a nice clean way to do a replace after match, sort of like this nice clean but non-working code:
#!/usr/bin/perl -w use strict; my %fixers=( 'amazon.com' => 'danube.com', 'ibm.com' => 'bm.com', ); my $text = qq( Blah <a href="http://amazon.com/foo">one</a> <a href="http://ebay.com/foo">two</a> ); sub tweak_links($) { my $text_ref = shift; while( $$text_ref =~ m|"http://(.*?)["/]|g ) { if( $fixers{$1} ) { $1 = $main::fixers{$1}; } } } tweak_links(\$text);

I'm looking for something that's good when most of the matches never happen, but I can zero in on the right section with a match. In my case I even know which of the replacements is most likely on a particular text block (but all of them could happen in each block.

Is there a usual way this is done?

Keywords: perl regex replacement regular expression table-driven match multiple replacements