U32 len = sizeof( U32 ) * some over estimate; U32 *diffs = malloc( len ); U32 i = 0; SV *packed; SvPV_Set( packed, diffs ); SvLEN_set( len ) for( ) { for( ) { diffs[ i++ ] = x; diffs[ i++ ] = y; { } SvCur_set( packed, ( i-1 ) * sizeof( U32 ) ); return packed; // sv_2mortal?