#! perl -slw use strict; use warnings; use Inline C => <<'__EOI__'; SV* f(SV* sv, I32 pos, I32 len) { SV* targ = newSV_type(SVt_PVLV); sv_magic(targ, NULL, PERL_MAGIC_substr, NULL, 0); LvTYPE(targ) = 'x'; LvTARG(targ) = SvREFCNT_inc_simple(sv); LvTARGOFF(targ) = pos; LvTARGLEN(targ) = len; return targ; } __EOI__ use Devel::Peek qw( Dump ); sub f :lvalue; my $x = "abcde"; my $r = ++f($x,2,1); Dump $r; print $x; __END__ C:\test>ike2-lv.pl SV = PVNV(0x3da9db8) at 0x277920 REFCNT = 1 FLAGS = (PADMY,POK,pPOK) IV = 0 NV = 0 PV = 0x3f044c8 "d"\0 CUR = 1 LEN = 8 abdde