in reply to Using c executable in Perl Script
The easiest way to access arrays and hashes when you are using Inline C or XS is to pass by reference and use the access macros to get at the values. Here is a trivial example to get you started.
use Inline 'C'; print multiply( [ 1,2,3,4 ] ); __END__ __C__ double multiply( SV * terms ) { I32 numterms = 0; int i; double result; /* Make sure we have an array ref with values */ if ((!SvROK(terms)) || (SvTYPE(SvRV(terms)) != SVt_PVAV) || ((numterms = av_len((AV *)SvRV(terms))) < 0)) { return 0; } /* Set result to first value in array */ result = SvNV(* av_fetch((AV *)SvRV(terms), 0, 0)); for (i = 1; i <= numterms; i++) { result *= SvNV(* av_fetch((AV *)SvRV(terms), i, 0)); } return result; }
cheers
tachyon
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Using c executable in Perl Script
by sgc (Initiate) on Sep 23, 2004 at 11:56 UTC | |
by tachyon (Chancellor) on Sep 23, 2004 at 22:44 UTC |