/* use new tmp array to prevent reordering caller array*/ for (i = 0; i < arrayLen; i++) { pvalue = av_fetch(data,i,0); /* get double, create new SV, and push it into data_tmp array */ retval = SvNV(*pvalue); av_push(data_tmp,newSVnv(retval)); } ... /* fetch scalar located at calculated index*/ pvalue = av_fetch(data_tmp,index,0); /* get double, create new SV, and push it into return array */ retval = SvNV(*pvalue); av_push(ret,newSVnv(retval)); ... Inline_Stack_Done; /* free memory */ av_undef(data_tmp); av_undef(ret);