use strict;
my $str = '9999XX00999X PIN # 999999
9999XX000999 - PIN#909999
XXXXX XX PIN #9099999
9999XX99X PIN999099
99XX999X PN 9999999
9999999 PIN
90PA999 PN 999999
999009 PIN#
99PA99 PN#9999999
PIN 999990
XXXPIN990999
PIN#999099
PIN# 9990909
PIN#9099999*';
my $regex = qr/((\b\d+)(?:\sPI?N ?#? ?))|((?:PI?N ?#? ?)(\d+))/mip;
my $subst = 'test\\1';
my $result = $str =~ s/$regex/$subst/rg;
print "The result of the substitution is' $result\n";
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html