I'm trying to write a C function that will return a scalar value. In
between, the C function will call back to a Perl function to help it
along. I have read that I shouldn't use Inline_Stack_Vars when calling
back to Perl so I'm using the examples in perldoc percall instead. Here's
a skeleton example of what I'm trying to do:
use Inline C;
sub exclaim {
my $string = shift;
return "$string!";
}
call_exclaim("Hello");
__END__
__C__
void call_exclaim(SV* string) {
dSP;
int count;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVsv(string)));
PUTBACK;
count = call_pv("exclaim", 0);
SPAGAIN;
if (count != 1) {
croak("Big trouble\n");
}
PUTBACK ;
FREETMPS ;
LEAVE ;
// Return value on stack?
}
The exclaim subroutine just appends a "!" to a scalar. I figure when
call_pv("exclaim", 0) is called, the return value of exclaim is now on the
stack. How do I get this scalar to be returned to Perl (since I can't use
Inline_Stack_Return(n) since Inline_Stack_Vars isn't being used)?
--Tao