#!/usr/bin/perl -wl use strict; use Inline C => <<'END_C'; SV* GenerateSessionID() { char uuid[16]; // buffer // fill buffer, i.e. mimic your XSessionID() int i; for (i=0; i<16; i++) { uuid[i] = 0xA0 + i; } return newSVpvn(uuid, 16); } END_C my $uuid = GenerateSessionID(); print join ' ', unpack("(H2)*", $uuid); #### $ ./962624.pl a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af #### SV * GenerateSessionID() PREINIT: char uuid[16]; CODE: XSessionID((uuid_t*)uuid); RETVAL = newSVpvn(uuid, 16); OUTPUT: RETVAL #### void GenerateSessionID() PREINIT: char uuid[16]; PPCODE: XSessionID((uuid_t*)uuid); ST(0) = newSVpvn(uuid, 16); sv_2mortal(ST(0)); XSRETURN(1);