1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
#!/usr/bin/perl use v5.12; use warnings; use Time::localtime; package t; my @testliste; my $maxspalte; my $zeiger; ...... sub get_new{ # in der Datensatzliste wandern, Argumente <<,<,>,>> my $richtung = shift; my @return; if ($richtung eq "<<"){$zeiger = 0} elsif ($richtung eq "<" && $zeiger > 0){ my $zz = $zeiger - 1; for ($zz; $zz > -1; $zz--){ #zeile 195 if ($testliste[$zz][-1] == 1){$zeiger = $zz; last} } #zeile 197 } elsif ($richtung eq ">" && $zeiger < $#testliste){ my $zz = $zeiger + 1; for ($zz; $zz < $#testliste + 1; $zz++){ #zeile 201 if ($testliste[$zz][-1] == 1){$zeiger = $zz; last} } #zeile 203 } elsif ($richtung eq ">>"){$zeiger = $#testliste} for my $spalte (0..$maxspalte){ #zeile 207 push (@return, $testliste[$zeiger][$spalte]) } return @return #zeile 210 }
for (; $zz > -1; $zz--)
2014-01-07T10:41:25 MuffiIst Perl eigentlich (mittlerweile) so intelligent, so eine Schleife mit Range-Operator zu optimieren, so dass intern die Liste nicht komplett im Speicher landet?
QuoteKann man diese "ungültigen" Datensätze nicht am Anfang einmal rausfiltern
QuoteZumindest syntaktisch wäre da ein Objekt mit ->next() ->last() ->first() ->prev()
intuitiver. Das eliminitert zudem das hässliche globale $zeiger
my @gueltige_datensaetze = filter($nach_irgendwas, @alle_datensaetze);
QuoteVielleicht sowas?.....