in reply to fun with $[

I see the same behaviour as listed with 5.8.[78] & 5.10.0. Try also Deparse (perl -MO=Deparse file) ...
# test.pm was used in p.pl. # # perl 5.10.0 package test; sub Init { $[ = 1; BEGIN { $^H{'$['} = q(1); } $[; } sub test { $[ = 0; print '($[= 0) array has ' . scalar(@_ . " elements, last index = +$#_\n"); } '???'; test.pm syntax OK use test; test::test(1, 2, 3, 4); test::Init(); test::test(1, 2, 3, 4); p.pl syntax OK # perl 5.8.7 package test; sub Init { $[ = 1; } sub test { print '($[= 1) array has ' . scalar(@_ . " elements, last index = +$#_\n"); } '???'; test.pm syntax OK use test; $[ = 1; test::test(1, 2, 3, 4); test::Init(); test::test(1, 2, 3, 4); p.pl syntax OK