Klaus Mock: 80 Thumbs pro Seite.

Beitrag lesen

Hallo Cheatah,

my $maxcount = $query->param('Index')+ $images_per_pages;
Auch hier mit '($query->... || 0)' einen Defaultwert zuweisen, sonst meckert strict (welches Du aus genau diesem Grund verwenden solltest).

Tja, strict meckert da eigentlich nicht, aber was soll's.

$maxcount = $#lines if $maxcount>$#lines;
"$#array" meinst Du eigentlich gar nicht; es ist ein Index auf das letzte Element des Arrays, nicht die Anzahl der Elemente. Achte darauf, ob und wann Du anschließend "+1" hinzufügen musst.

Tja, aus dem Kontext heraus kann @lines keine Lücken aufweisen, also ist $#lines vollkommen in Ordnung, wenn man nur weiß, was es bedeutet.

Also, wo jetzt der Logik-Fehler liegt, hab ich vor lauter Stil- und Syntax-Fehlern leider nicht gesehen ;-)

Stilfragen zu diskutieren ist ziemlich müßig, da sogar das von Dir so gern zitierte perlstyle eigentlich nur Empfehlungen und keine Vorschriften enthält.
Mir ist durchaus bewußt, daß eine gute und konsequente Einhaltung eines Programmierstils unerläßlich ist, aber da sollte jeder schon seinen eigenen Weg finden. Aber ich will hier nicht eine Diskussion über Sinn und Unsinn der Empfehlungen aus perlstyle anzetteln.

aber was hälst Du von etwas in dieser Richtung:
foreach my $line (@lines[ (
  (($query->param('Index') || 0) < 0)
    ? 0
    : (($query->param('Index') || 0) > scalar @lines)
      ? scalar @lines
      : ($query->param('Index') || 0)
  ) .. (
  (($query->param('Index') || 0) < 0)
    ? 0
    : (($query->param('Index') || 0) > scalar @lines)
      ? scalar @lines
      : ($query->param('Index') || 0)
  ) ]) {
  print $line, "\n";
}

(ungetestet)

und sicherlich genial, aber ich denke doch, daß selbst Du in zwei Wochen beim Anblick dieses Ungetüms kurz innehältst und Dir denkst "Was hat er damit wohl sagen wollen?"

Wobei ich ehrlich gesagt vorziehen würde, nicht die komplette Datei einzulesen, sondern etwa wie folgt vorzugehen:
my $count = 0; # Ja, hier kann man auch $. verwenden; ich bevorzuge dies.
open(READ, $file) or die "Kann $file nicht oeffnen: $!";
while (<READ>) {
  next if (++$count < ($query->param('Index') || 0));
  end if ($count > ($query->param('Index') || 0)+$images_per_pages);
  print $_, "\n";
}
close(READ);

Ich auch.

Ach ja, bevor ich es vergesse:
@Marcus:

for($linecount = $query->param('Index');$linecount <$maxcount;$linecount++)
  {
  chomp $lines[$linecount];
  }

Überleg mal welche Elemente des Array @lines hier bearbeitet werden...

foreach $line (@lines)
  {
@fields=split(/\s*|\s*/,$line);
$thumb=$fields[5];

print <<HTMLF;
<blablabla>
HTMLF
  }

...und welche hier.

und dann versuch mal (unter der Voraussetzung, die ganze Datei ist eingelesen)

for($linecount = $query->param('Index');$linecount <$maxcount;$linecount++)
  {
  chomp $lines[$linecount];

wobei mir anstelle von

my @fields=split(/\s*|\s*/,$line);
  my $thumb=$fields[5];

das hier

#  my($bla,$ble,$bli,$blo,$blu,$thumb,$wasauchimmer) = split(/\s*|\s*/,$line);

mehr zusagen würde.

print <<HTMLF;
<blablabla>
HTMLF
  }

Jetzt lehn Dich zurück und sieh Dir Zeile für Zeile des ganzen Scripts nochmals an, und versuche festzustellen, was jede einzelene Anweisung wirklich macht.
Die bei den Perl-Distributionen und Moduln beigepackte Dokumentation oder auch ein gutes Buch über Perl hilft Dir da sicherlich auch weiter.

Grüße
  Klaus