Listing 5. The XS Implementation double std_dev(sv) INPUT: SV * sv CODE: double sum = 0; double sumsq = 0; double mean = 0; /* Dereference a scalar to retrieve an array value */ AV* data = (AV*)SvRV(sv); /* Determine the length of the array */ I32 arrayLen = av_len(data); if(arrayLen > 0) { for(I32 i = 0; i <= arrayLen; i++) { /* Fetch the scalar located at i from the array.*/ SV** pvalue = av_fetch(data,i,0); /* Dereference the scalar into a numeric value. */ double value = SvNV(*pvalue); /* collect the sum and the sum of squares. */ sum += value; sumsq += value * value; } mean = (sum/(arrayLen+1)); RETVAL = sqrt((sumsq/(arrayLen+1)) - (mean * mean)); } else { RETVAL = 0; } OUTPUT: RETVAL