double foo(aref) SV * aref INIT: int i, last_index; int *array; if ((!SvROK(aref)) || (SvTYPE(SvRV(aref)) != SVt_PVAV) || ((last_index = av_len((AV *)SvRV(aref))) < 0)) { XSRETURN_UNDEF; } array = (int*)calloc(last_index+1, sizeof(int) CODE: for(i=0;i<=last_index;i++) array[i] = SvIV(*av_fetch((AV *)SvRV(array), i, 0)); RETVAL = foo_in_c(array, last_index+1); OUTPUT: RETVAL