note
danger
<p>
Well, [pg]'s solution works for the limited input provided and you
haven't given any further particulars regarding input. That solution
breaks just changing the first word from "thought" to "though" :
<code>
my $var = "though test tot 1 2 3 tesset";
$var =~ s/(t.*?t)/($1 ne "test") ? "" : $1/ge;
print $var; # prints: esoesset
</code>
<p>
But, now you mention a further constraint that the words to be deleted
may not contain any 't's inside, which is not inferrable from your earlier
posts at all. Providing a good specification is much more than providing a
sample case (but providing test cases *is* important).
<p>
Anyway, here's a go at your new specs:
<code>
my $var = <<TT;
target blah foo test thought 123 though tempest
testament though tightest treatment thermostat tantamount taboo
TT
$var =~ s/(?!\btest\b)(\bt[^t\W]*t\b)//g;
print $var;
__END__
## Result:
blah foo test 123 though
testament though tightest treatment thermostat tantamount taboo
</code>
<p>
So, all the 't.*t' words on the second line remain because they contain
a 't' character within. All the 't.*t' words on the first line get
deleted except for 'test'.
307246
307278