Cough.
require 5.008; Internals::SvREADONLY(@array, 1) will prevent you from adding any elements beyond the highest one ever used. But you didn't hear me say it.
(Update: also prevents @array = ... or delete $array[...], even if they refer to existing elements.)