Depending upon how loose you want the criteria to be, you might get away with something like this.
my $term = 'P100';
## my $re = qr[@{[ join '\W*', split '', $term ]}]; # Improved slightl
+y.
my $re = qr[@{[ join '\W*', map "\Q$_\E", split '', $term ]}]x;
for(
'P100', 'P-100', 'P 100', 'P1 00',
'the P 100 is very similar in style to the P-101 & P102.'.
'The P-100 is a generation behind the P1000'
) {
print "Matched $1" while m[\b($re)\b]g;
};;
Matched P100
Matched P-100
Matched P 100
Matched P1 00
Matched P 100
Matched P-100
You could also add /i if you want case insensitivity.
Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail