On Oct 25, Girish (Skyscape) said:

>%Replacements = (
>        ";s(\d)",      "<sup>$1</sup>"
>       ,";b(\d)",      "<sub>$1</sub>"
>);

Your problem is that these double-quoted strings get interpolated right
here.  "\d" is "d", and "$1" is whatever the value of $1 is at the
time.  You'll need to take a more involving approach:

  $inputstr = "E=mc;s2";

  %rep = (
    ';s(\d)' => '"<sup>$1</sup>"',
    ';b(\d)' => '"<sub>$1</sub>"',
  );

  for $x (keys %rep) {
    $inputstr =~ s/$x/$rep{$x}/eeg;
  }

  print $inputstr;

There are two levels of indirection here -- the first is the single quoted
string '"<sup>$1</sup>"', and the second is that fact that that single
quoted string has a double quoted string inside it.  That's because we're
using /ee on the s///, which means "eval() the right side twice".  The
first time, $rep{$x} evaluates to "<sup>$1</sup>", and the second time, it
evaluates to a string, where $1 is interpolated.

-- 
Jeff "japhy" Pinyan      [EMAIL PROTECTED]      http://www.pobox.com/~japhy/
RPI Acacia brother #734   http://www.perlmonks.org/   http://www.cpan.org/
** Look for "Regular Expressions in Perl" published by Manning, in 2002 **


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to