The first example you give prints the result of the substitution (the result of $string =~ s/_/ /g). If you look at the documentation for s///, you will see that it returns the number of substitutions made. It's easier to see in code.
in reply to Using the result of s///
That's what the first result is equal to. The second example prints the new $string, which is what you want in this case.
$string = 'This_has_underscores';
$result = $string =~ s/_/ /g;
elusion : http://matt.diephouse.com