use warnings; use strict; use 5.010; my $line = '*Mary* had a little lamb'; my $bagofwords = qr{had |a |Sam |Tom}; if ($line =~ s/\*([^*]+)\*\s*((?:$bagofwords)*)/*$1 $2* /) { say $line; }