in reply to Making a hash of regexes

Can you show us a code snippet? What are you trying to do the substitution on? The following works, but I think it's not what you are asking for.

#!/usr/bin/perl -w use strict; my %hash = ( foo => 'bar', baz => 'quux' ); my $string = 'foo and baz'; while( my($k,$v) = each %hash ) { $string =~ s/$k/$v/g; } print $string;

What I'm asking is: "what is your substitution target"? Are you trying to simply make substitutions in a string, like I did above, or are you trying to munge hash keys or something strange like that?

Cheers,
Ovid

New address of my CGI Course.
Silence is Evil (feel free to copy and distribute widely - note copyright text)

Replies are listed 'Best First'.
Re: Re: Making a hash of regexes
by jpfarmer (Pilgrim) on Nov 25, 2002 at 20:34 UTC
    I'm trying to substitute psudo-html into html. It would convert this string: [h2]Test[/h2] [h3]Test[/h3] into <h2>Test</h2> <h3>Test</h3>. This is what the code looks like inside my program:
    # Create a hash of codes for substitution my %directSubs = ( qr/\[h(\d)\]/ => '<h$1>', qr/\[\/h(\d)\]/=> '</h$1>' ); # Substitute the codes while(($a,$b) = each %directSubs){ $line =~ s/$a/$b/gi; }

      One way

      #! perl -slw use strict; my $pseudo = '[h2]Test[/h2] [h3]Test[/h3]'; # Create a hash of codes for substitution my %directSubs = ( qr/\[h(\d)\]/ => '"<h$1>"', qr/\[\/h(\d)\]/=> '"</h$1>"' ); # Substitute the codes while(($a,$b) = each %directSubs){ $pseudo =~ s/$a/$b/giee; } print $pseudo; __END__ # Output C:\test>215723 <h2>Test</h2> <h3>Test</h3> C:\test>

      Okay you lot, get your wings on the left, halos on the right. It's one size fits all, and "No!", you can't have a different color.
      Pick up your cloud down the end and "Yes" if you get allocated a grey one they are a bit damp under foot, but someone has to get them.
      Get used to the wings fast cos its an 8 hour day...unless the Govenor calls for a cyclone or hurricane, in which case 16 hour shifts are mandatory.
      Just be grateful that you arrived just as the tornado season finished. Them buggers are real work.