in reply to replace a digit with another digit

You're on the right path with tr.
$a = "A1"; $b = "B2"; printf("a: %s b: %s\n", $a, $b); $a =~ tr/[12]/[21]/; $b =~ tr/[12]/[21]/; printf("a: %s b: %s\n", $a, $b);

Replies are listed 'Best First'.
Re^2: replace a digit with another digit
by davido (Cardinal) on Aug 17, 2005 at 19:21 UTC

    tr/// is ok if it doesn't matter whether or not the digit follows an alpha character. He didn't specify whether this would be an issue or not; his discription of the problem was inadequate at explaining whether the alpha character plays a significant roll in determining whether or not to swap twos for ones and ones for twos.

    Your example with tr/[12]/[21]/; is in error, though. Technically it's not hurting anything to be substituting a [ character for another [ character, but it's pointless to do so. You might have been thinking that you needed to set up a character class within the tr/// operator. But tr/// doesn't use character classes, so [ and ] are seen as literal characters to be transliterated.

    It's also advisable to get in the habit of not using $a and $b, even in examples, since these variables (their global form) play a crucial role in sort. In the interest of avoiding confusion or difficult to track-down bugs, let sort have $a and $b. You can have your way with $c .. $z though. ;)


    Dave

      Agree'd on the $a/$b, and I see the point on the substitution. Thanks.