Your script gives the output
The post as required needs to retain the 906 and hence , one cannot do a normal "+" search on the digits and also the user string can have a 9[0-9]
at any portion of the string like |868969780| , then your scripts turns it to x like this |868x| , and your script is a bit greedy and also changes the pattern to "x" .
Hence we require to have a look_ahead and look_behind positive assertions(here regular width is ok) to have a pattern match of 9[0-9]
following a "|" but not including a "|" and followed by a "|" but not including the "|" as the pattern
$str =~ s/(?<=\|)9[0-9](?=\|)/X/g;
This is the extended pattern that shall do it as in my previous post