my @array = '1' .. '3'; my $test = Test->new([@array]) : print "Ref: ", ref $g->avref, "\n"; use Devel::Peek; Dump($g->avref); #### SvTYPE: 10 Ref: REF Attempt to free unreferenced scalar: SV 0x1801464, Perl interpreter: 0x1800400 at a line 16. SV = RV(0x1811aa4) at 0x180147c REFCNT = 1 FLAGS = (TEMP,ROK) RV = 0x1801464 SV = PV(0x1801684) at 0x1801464 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x301f90 "(0x1811aa4) at 0x180147c\n REFCNT = 1\n FLAGS = (TEMP,ROK)"\0 CUR = 58 LEN = 59 #### SvTYPE: 10 Ref: ARRAY SV = RV(0x1811aa4) at 0x1801464 REFCNT = 1 FLAGS = (TEMP,ROK) RV = 0x180c2c0 SV = PVAV(0x180283c) at 0x180c2c0 REFCNT = 2 FLAGS = (PADBUSY,PADMY) IV = 0 NV = 0 ARRAY = 0x327a10 FILL = 2 MAX = 3 ARYLEN = 0x0 FLAGS = (REAL) Elt No. 0 SV = IV(0x1826870) at 0x1801380 REFCNT = 1 FLAGS = (IOK,pIOK) IV = 1 Elt No. 1 SV = IV(0x1826874) at 0x1801434 REFCNT = 1 FLAGS = (IOK,pIOK) IV = 2 Elt No. 2 SV = IV(0x1826878) at 0x180144c REFCNT = 1 FLAGS = (IOK,pIOK) IV = 3 #### #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" typedef struct { AV *avref; } test_t; typedef test_t *Test; MODULE = Test PACKAGE = Test Test new (char *class, SV *avref) PROTOTYPE: $\@ CODE: { IV i; test_t *self; New(0, self, 1, test_t); printf("SvTYPE: %d\n", SvTYPE(SvRV(avref))); self->avref = (AV*)SvRV(avref); RETVAL = self; } OUTPUT: RETVAL AV * avref (Test self, AV *avref=Nullav) PROTOTYPE: $;\@ CODE: { if (items == 2) self->avref = avref; RETVAL = self->avref; } OUTPUT: RETVAL