int function(a,b,sv) int a; unsigned short b; SV * sv; INIT: unsigned char ** c; // check if scalar is a reference and is referencing an array if(SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVAV){ // dereference array AV * av = (AV*)SvRV(sv); // get highest array index I32 c_len = av_len(av); // allocate array c = (unsigned char **)malloc(len + 1); // loop through array for(int i = 0; i <= c_len; i++){ // store string in C array c[i] = (char*)SvPV_nolen((SV*)*av_fetch(av, i, 0)); } } OUTPUT: RETVAL