Thread "Ungeschickte" sort-Subroutine spammt Speicher voll.. (2 answers)
Opened by FoolAck at 2008-07-29 01:39

moritz
 2008-07-29 01:45
#112841 #112841
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
FoolAck+2008-07-28 23:39:00--
Hier der pöhse Einzeiler, der meinen RAM zumüllt:
Code: (dl )
ls -l|perl -ane 'push @lines, [@F]; END { print sort {$lines[$a][4] <=> $lines[$b][4]} @lines; }'

Hm. Ist natürlich offensichtlich falsch. $a ist in dem Fall ja eine Arrayreferenz (genauso wie $b), aber warum (und mit was) wird der Speicher da so übelst vollgepackt?


$a ist eine Referenz, und die wird als Array-Index, also als Integer benutzt. Mit vermutlich ziemlich großen Werten.
Dadurch, dass du dahinter noch einen Subscript-Operator hast (also das 4 in eckigen Klammern) greift die Autovivification, d.h. an der Stelle
Code: (dl )
$lines[$a]
wird ein neues Array erzeugt - und Speicher für alle Elemente bis dahin allokiert.

View full thread "Ungeschickte" sort-Subroutine spammt Speicher voll..