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

FoolAck
 2008-07-29 01:39
#112839 #112839
User since
2008-05-02
69 Artikel
BenutzerIn
[default_avatar]
Ich wollte eben stumpf die Ausgabe von "ls -l" nach Größe anordnen (ja, ich weiß. "man ls". Die "-S" Option unzo...) und hab dabei die sort-Sub ziemlich versaut, was in einem üblen Speicherzugespamme resultierte.

Hier der (inzwischen) korrigierte Einzeiler:
Code: (dl )
ls -l|perl -ane 'push @lines, [@F]; END { print map { "@$_\n" } sort {$a->[4] <=> $b->[4]}  @lines; }'


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?

Quote
This is perl, v5.8.8 built for i486-linux-gnu-thread-multi


Mir macht das tendenziell ein wenig Angst. (Innerhalb einer Sekunde oder so mehrere 100mb belegt (halt, bis kein Speicher mehr frei ist....).)
Die "kreative" Sort-Subroutine ist übrigens ein Resultat von Schlafdeprivation, also nicht lachen. :(

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