The problem is that with perl -p, you are only reading and examining a line at a time. Thus the pattern match is not being applied to anything which straddles a line boundary, even if you have the /s modifier. You can fix that by reading all lines at once, with perl -0777 or something equivalent.
See also the Perl FAQ, which has a detailed discussion of this topic.
perl should have given me an error/warning because the s modifier isn't applicable to -p.
Anyway, here's what I tried, but this time I get nothing outputted:
You dropped the -p so you're not reading your input any longer. Also note that the -e needs to go last, it says "the script is not in a file; the next argument is the script".
perl -0777 -p -e 's/func_a\((.*)?\);/func_b(\1,\n6)/s' < file | more