A quick try:
my $string = join \000, @code;
$string =~ s!("\w+")!<b>$1</b>!g;
@newcode = split /\000/, $string;
. The regex should be executed each time in the loop BTW. Are you sure that not all the text is in one item for some reason? Try the g modifier after your regex, see if that cures it.
I also changed the regex a bit. See 7 Stages of Regex Users and Death to Dot Star!. Depending on the complexity of your input, you might be better of with Parse::RecDescent or siblings.
"We are not alone"(FZ)