in reply to xs modifying passed value
wrong. do "$passfail" not \$passfail. "\$passfail" is an anonymous scalar that you will never access again. "$passfail" you can access again. You passed a SV RV BTW http://cpansearch.perl.org/src/RURBAN/illguts-0.42/index-14.html#svrv and the outer SV was anonymous as I said.
my $t = $tmp->strToInt(\$passfail);
If you really want to accept in the in params a scalar with a reference, it will be a bit more complicated. The XS parameters processing is done from a file called lib/ExtUtils/typemap in perl.git. That contains what the XSUB interface can automate for you. For more complicated stuff I recommend you directly manipulate the SV*s using sv_set*v().
If you want help, come back. Also use a C debugger with a watch window. printf debugging very slow for a programmer to work with.