in reply to s/// operator and undef question...

Your expression $target =~ /is/ in a list context will return (1) for success (see m// in perlop). Thus, your loop is equivalent to this:
for my $is (1) { # one iteration with $is=1 $target =~ s//are/; }
I, however, am getting different results than you under 5.6:
thare is a test of the servise
I get the same results by dropping the loop entirely and doing just this:
$target =~ /is/; $target =~ s//are/;
Like you, I find that odd. Somehow Perl is doing the equivalent of s/is/are/;.