Cheatah: 80 Thumbs pro Seite.

Beitrag lesen

Hi,

use CGI;

benutzt Du auch:

#!/usr/bin/perl -w
use strict;

open(file, "$filename");

perldoc perlfaq4
What's wrong with always quoting "$vars"?

@lines=<file>;

Vorher mit 'my' deklariert?

my $Index = $query->param('Index');
if ($Index eq ''){$Index = 0;}

my $index = $query->param('Index') || 0;

Lies zu Großschrift in Variablennamen bitte

perldoc perlstyle

Auch in URL-Parametern macht sich Kleinschrift irgendwie besser.

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).

$maxcount = $#lines if $maxcount>$#lines;

$maxcount = scalar @lines if ...

"$#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.

my $linecount;

[...]

for($linecount = [...]

for (my $linecount = ...

{
  chomp $lines[$linecount];
  }

Ah. Was hälst Du von:

chomp @lines;

Also, wo jetzt der Logik-Fehler liegt, hab ich vor lauter Stil- und Syntax-Fehlern leider nicht gesehen ;-) 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)

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);

Achte auf die exakten Grenzen; vielleicht sind es bei diesem Code dann 69 oder 71 Bilder oder so :-)

Cheatah