use Inline 'C', <<'END_C' void _munge( char *outlist, int size, char *inlist1, char *inlist2 ) { double *output = (double *) outlist; double *list1 = (double *) inlist1; double *list2 = (double *) inlist2; int i; for( i= 0; i < size; ++i ) { printf("%f %f\n", inlist1[i], inlist2[i]); } } END_C ; my $size = 3; my $out = "\0" x ( $size * length pack "d", 0.0 ); my $pack1 = pack "d$size", 1, 2, 3; my $pack2 = pack "d$size", 4, 5, 6; _munge( $out, $size, $pack1, $pack2 ); #### 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000