There are plenty of solutions already mentioned, but I thought I'd mention something about the code that you tried:
$a !~ s/$b/$b/;
There is no !~ when dealing with substitution, only with matching. If there was no match in a substitution, it didn't find anything to replace, and so won't do anything. You can do odd things with negative assertions, but I would assume you probably wanted to match:
$a !~ m/$b/;
But, we get into the question of 'match' ... in this case, if $a contains $b, the expression will be true. if you want to ensure that $a didn't have any extra characters, you'd want to match from the beginning of the string to the end:
$a !~ m/^$b$/;
But if $b contains any regular expression meta characters (parens, brackets, braces, asterisks, periods, question marks, etc), odd things may occur that you didn't want to happen. So, if you don't want that, you use:
$a ne $b
If you are looking for $b within $a, and there's a chance of meta characters, then you'll want to use a regex, but escape any character in $b that might not be safe.
In reply to Re: Replace $a with $b if $a ne $b
by jhourcle
in thread Replace $a with $b if $a ne $b
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |