Thomas Borsdorf: Liste nicht verfügbar

Hallo zusammen!

Ich hab ein recht kniffliges Problem:

--- schnipp ---
  Einlesen();
  Pruefen();
  Verarbeiten();
  [...]

sub Einlesen {
    [...]
    open (GROESSE, "<groessen.dat");
    @Groessen = <GROESSE>;
    close GROESSE;
  }

sub Pruefen() {
    $Rueck = 0;
    foreach $Eintrag (@Groessen) {
      ($Code, $Bezeichnung, $Betrag, $Ausschluss) = split(//, $Eintrag);
      if ($Code eq $Formular{'Groesse'}) {
        if ($Formular{'Typ'} =~ /$Ausschluss/) {
          $Rueck = 1;
  }  }  }  }

sub Verarbeiten {
    foreach $Eintrag (@Groessen) {
      ($Code, $Bezeichnung, $Betrag, $Ausschluss) = split(//, $Eintrag);
      if ($Code eq $Formular{'Groesse'}) {
        $Groessebezeichnung = $Bezeichnung;
        $Groessebetrag = $Betrag;
  }  }  }

--- schnapp ---

"Verarbeiten" läuft ohne Probleme, "Pruefen" nicht. Der Bereich in "foreach.." wird nicht angesprungen. Ich schließe daraus, daß "@Groessen" an dieser Stelle leer ist. Allerdings kann ich mir das nicht erklären, denn in "Verarbeiten" ist er ja nicht leer.

Wer kann mir helfen?

MfG Thomas.

  1. Hi,

    Ich hab ein recht kniffliges Problem:

    ich kann es auch nicht wirklich erklären, aber bei _so_ schlechtem Stil sind Fehler eigentlich kaum verwunderlich ;-)

    --- schnipp ---

    #!/usr/bin/perl -w
    use strict;
    use CGI ':standard';

    Einlesen();

    my @groessen = &Einlesen;

    Pruefen();

    my $rueck = &Pruefen(@groessen);

    Verarbeiten();

    &Verarbeiten(@groessen);

    sub Einlesen {
        open (GROESSE, "<groessen.dat");

    open(GROESSE, 'groessen.dat) or die "Kann groessen.dat nicht oeffnen: $!";

    @Groessen = <GROESSE>;

    my @Groessen = <GROESSE>;

    close GROESSE;

    close GROESSE;
    return @Groessen;

    }

    sub Pruefen() {

    sub Pruefen {

    $Rueck = 0;

    my $Rueck;
    my @Groessen = shift;

    foreach $Eintrag (@Groessen) {

    foreach my $Eintrag (@Groessen) {

    ($Code, $Bezeichnung, $Betrag, $Ausschluss) = split(//, $Eintrag);

    my ($Code...

    if ($Code eq $Formular{'Groesse'}) {
            if ($Formular{'Typ'} =~ /$Ausschluss/) {

    if ($Code eq param('Groesse') && param('Typ') =~ /$Ausschluss/) {

    $Rueck = 1;
      }  }  }  }

    } }
    return $Rueck;
    }

    sub Verarbeiten {

    my @Groessen = shift;

    foreach $Eintrag (@Groessen) {

    foreach my $Eintrag (@Groessen) {

    ($Code, $Bezeichnung, $Betrag, $Ausschluss) = split(//, $Eintrag);

    my ($Code...

    if ($Code eq $Formular{'Groesse'}) {

    if ($Code eq param('Groesse')) {

    $Groessebezeichnung = $Bezeichnung;
            $Groessebetrag = $Betrag;

    my $Groessebezeichnung = $Bezeichnung;
    my $Groessebetrag = $Betrag;

    }  }  }

    } } }

    Wer kann mir helfen?

    perldoc perlstyle ;-)

    Cheatah

    1. Hi,

      Hi auch!

      ich kann es auch nicht wirklich erklären, aber bei _so_ schlechtem Stil sind Fehler eigentlich kaum verwunderlich ;-)

      Ich weiß daß ich nicht den besten Stil draufhab, aber bisher hat es immer gereicht. Aber da sowohl in "Pruefen" als auch in "Verarbeiten" derselbe schlechte Stil steht solte es daran eigendlich nicht liegen.

      #!/usr/bin/perl -w
      use strict;
      use CGI ':standard';

      Damit werd ich mich wohl mal beschäftigen müssen. Bisher hab ich nur noch keine Zeit dazu gehabt.

      my @groessen = &Einlesen;

      Ansich ist das doch die einzige Änderung, die du vorschlägst, oder? Mal abgesehen von Parameterübergabe...

      perldoc perlstyle ;-)

      Hab ich nicht gefunden :-))

      Trotzdem erstmal vielen Dank, ich werd es mal so testen. Vielleicht hilft es ja...

      Cheatah

      MfG Thomas.

      1. Hi,

        ich kann es auch nicht wirklich erklären, aber bei _so_ schlechtem Stil sind Fehler eigentlich kaum verwunderlich ;-)

        Ich weiß daß ich nicht den besten Stil draufhab, aber bisher hat es immer gereicht.

        genau das gleiche habe ich mir auch mal gesagt... und jetzt verfluche ich meine alten Scripts ;-)

        Aber da sowohl in "Pruefen" als auch in "Verarbeiten" derselbe schlechte Stil steht solte es daran eigendlich nicht liegen.

        Wie gesagt, ich kann es auch nicht erklären.

        #!/usr/bin/perl -w
        use strict;
        use CGI ':standard';

        Damit werd ich mich wohl mal beschäftigen müssen. Bisher hab ich nur noch keine Zeit dazu gehabt.

        Nimm Dir 'ne Menge Zeit mit. Die "use CGI"-Zeile kannst Du im Zweifel weglassen und statt param() weiter %Formular benutzen - aber von solchen Dingen (insbesondere von mit Großbuchstaben beginnenden Variablennamen; die sind auch schlechter Stil) solltest Du Dich recht bald trennen.

        my @groessen = &Einlesen;

        Ansich ist das doch die einzige Änderung, die du vorschlägst, oder? Mal abgesehen von Parameterübergabe...

        Im Prinzip ja. Definiere die Variable und übergib sie, dann sind die Daten immer dort vorhanden, wo Du sie brauchst.

        perldoc perlstyle ;-)

        Hab ich nicht gefunden :-))

        Sollte sich auf Deinem Rechner befinden, nämlich da, wo Du Perl installiert hast. Einfach eintippen, bzw. bei ActivePerl die HTML-Doku nutzen.

        Cheatah