Ich versuch's mal aus dem Gedächtnis zu beantworten, ohne die man pages zu lesen (was ich hiermit auch empfehle):
Perl hat meines Wissens nach keine "richtigen" Arrays, sondern die Arrays sind intern als verkettete Listen realisiert (und das ist [huhu Michael S.!] unabhängig vom Betriebssystem. d.h., nur die belegten Array-Elemente belegen Speicherplatz (liebe Perl-Cracks, korrigiert mich bitte, wenn ich irre)
Des weitenen ist es so, daß sich der Scope und - in Deinem Fall wichtiger - der Extend immer auf einen Block (also "{"..."}") beziehen. Beim Eintritt in den Block "{" wird - vereinfacht ausgedrückt - die Variable angelegt - soweit sie mit "my" deklariert wird - und beim Verlassen des Blocks "}" wird der Speicherplatz wieder freigegeben, es sei denn, daß die Werte noch anderweitig referenziert werden (z.B. indem ein Array als Ergebnis einer Funktion zurückgeliefert wird).
So, ich hoffe a) daß das hablwegs korrekt ist und ich b) Dich nicht zu sehr verwirrt habe. Empfehlung: man pages zu diesem Thema lesen.
Ansosnten: sollte Dein Programm so aufgebaut sein, daß alle Variablen am Anfang als globale Variablen definiert / deklariert werden, dann belegen sie alle Speicherplatz. Ggf. könnte es sich lohnen, die Definitionen / Deklarationen in Subroutinen zu verlegen und die Variablen dort mit "my" lokal zu deklarieren. Besser + eleganter wäre es, wenn Du Deine Programme objektorientiert schreibst und den dynaloader einsetzt.
Und noch angemerkt: wenn Du keine massiven Performance-Probleme hast, dann würde ich mir über die Frage nicht weiter den Kopf zerbrechen. Perl kann sowohl unter U*x als auch unter WinDOS *richtig* große Arrays verarbeiten.
Letzer Tip: schau' Dir mal den Befehl "undef" an :-)