use warnings; use Inline C => Config => BUILD_NOISY => 1; use Inline C => <<'EOC'; SV * call_Adder(SV * a, SV * b) { dSP; I32 ax; int count; PUSHMARK(SP); XPUSHs(a); XPUSHs(b); PUTBACK; count = call_pv("Adder", G_SCALAR); SPAGAIN; SP -= count; ax = (SP - PL_stack_base) + 1; if (count != 1) croak("Big trouble\n"); /* Avoid "Attempt to free unreferenced scalar" warning */ SvREFCNT_inc(ST(0)); return ST(0); } EOC my $val = call_Adder(13,118); print $val, "\n"; my $val2 = call_Adder(14,119); print $val2, "\n"; my $val3 = call_Adder(14,8); print $val3, "\n"; sub Adder { my($a, $b) = @_; $a + $b; } __END__ Outputs (as expected): 131 133 22