#! perl -slw use strict; use Inline C => Config => BUILD_NOISY => 1; use Inline C => <<'END_C', NAME => 'test', CLEAN_AFTER_BUILD => 0; char *newxz( unsigned __int64 bytes ) { char *p; warn( "Attempting allocate %I64u bytes\n", bytes ); Newxz( p, bytes, char ); if( !p ) croak( "Couldn't allocate %I64u bytes\n", bytes ); return p; } SV* new( const char * classname, SV *bits ) { unsigned __int64 bytes = ( SvUV( bits )+7 ) / 8; unsigned char *vector = newxz( bytes ); SV * obj; SV * obj_ref; obj = newSV( 0 ); SvPOK_only( obj ); SvPV_set( obj, vector ); SvLEN_set( obj, bytes ); obj_ref = newRV_noinc( obj ); sv_bless( obj_ref, gv_stashpv( classname, GV_ADD) ); return obj_ref; } END_C use Devel::Peek; my $v = new( 'fred', eval $ARGV[ 0 ] ); #print length $$v; Dump( $$v );