knoppix@Microknoppix:~$ perl -E ' > $num = q{17403 4893 18345-973409}; > say $num; > $sepCt = 0; > push @seps, [ $1, $-[ 0 ] - $sepCt ++ ] while $num =~ m{(\D)}g; > $num =~ s{\D}{}g; > $maskLen = length( $num ) - 10; > substr $num, 6, $maskLen, q{X} x $maskLen; > substr $num, $_->[ 1 ], 0, $_->[ 0 ] for reverse @seps; > say $num;' 17403 4893 18345-973409 17403 4XXX XXXXX-XX3409 knoppix@Microknoppix:~$ #### knoppix@Microknoppix:~$ perl -E ' $num = q{17403 4893 18345-973409}; say $num; push @seps, [ $1, $-[ 0 ] ] while $num =~ m{(\D)}g; $num =~ s{\D}{}g; $maskLen = length( $num ) - 10; substr $num, 6, $maskLen, q{X} x $maskLen; substr $num, $_->[ 1 ], 0, $_->[ 0 ] for @seps; say $num;' 17403 4893 18345-973409 17403 4XXX XXXXX-XX3409 knoppix@Microknoppix:~$