in reply to Re: how internally $#array is working in Perl
in thread how internally $#array is working in Perl

Actually, because $#array can be used as an lvalue, a fair bit of magic is going on (including adding "magic" to both the returned scalar and the array in some circumstances). Fortunately, it is invisible to the user.
$ perl -MDevel::Peek -e'my @a; Dump(\@a,1); Dump($#a); Dump(\@a,1);' SV = IV(0x816c154) at 0x816c158 REFCNT = 1 FLAGS = (TEMP,ROK) RV = 0x817bc30 SV = PVAV(0x816d038) at 0x817bc30 REFCNT = 2 FLAGS = (PADMY) ARRAY = 0x0 FILL = -1 MAX = -1 ARYLEN = 0x0 FLAGS = (REAL) SV = PVMG(0x817718c) at 0x816c158 REFCNT = 1 FLAGS = (GMG,SMG) IV = 0 NV = 0 PV = 0 MAGIC = 0x8194008 MG_VIRTUAL = &PL_vtbl_arylen MG_TYPE = PERL_MAGIC_arylen(#) MG_OBJ = 0x817bc30 SV = IV(0x816c2b4) at 0x816c2b8 REFCNT = 1 FLAGS = (TEMP,ROK) RV = 0x817bc30 SV = PVAV(0x816d038) at 0x817bc30 REFCNT = 2 FLAGS = (PADMY,RMG) MAGIC = 0x8193420 MG_VIRTUAL = &PL_vtbl_arylen_p MG_TYPE = PERL_MAGIC_arylen_p(@) MG_FLAGS = 0x02 REFCOUNTED MG_OBJ = 0x816c158 SV = PVMG(0x817718c) at 0x816c158 REFCNT = 1 FLAGS = (GMG,SMG) IV = 0 NV = 0 PV = 0 MAGIC = 0x8194008 MG_VIRTUAL = &PL_vtbl_arylen MG_TYPE = PERL_MAGIC_arylen(#) MG_OBJ = 0x817bc30 ARRAY = 0x0 FILL = -1 MAX = -1 ARYLEN = 0x816c158 FLAGS = (REAL)