Kurti: Würde die Routine gerne verallgemeinern

Hallo,
ich habe in einem Programm, was ich jetzt übernehme, folgendes gefunden:

  
# $feld='Name'; $wert='Xaver'  
  
my $rc=feldpruefung ($feld, $wert);  
  
# ...  
  
sub einzelfeldpruefung {  
   my %prueftab;  
   $prueftab{'Name'}=[\&test_mussfeld,\&test_ob_minlae3,\&too_much_chars,\&too_much_digits,\&test_ob_Name];  
   $prueftab{'PLZ'}=[\&test_ob_minlae5,\&test_ob_Ganzzahl];  
   $prueftab{'Ort'}=[\&test_ob_minlae2,\&too_much_chars,\&too_much_digits,\&test_ob_Adressteil];  
   $prueftab{'Mitteilung'}=[\&test_mussfeld,\&test_ob_minlae10,\&too_much_chars,\&too_much_digits,\&test_ob_Blanks];  
# ...  
   my $feld = shift;  
   my $wert = shift;  
   for my $code_ref ( @{$prueftab{$feld}}) {  
      my $erg = $code_ref->($feld, $wert);  
# ...  
   }  
}  
  
sub test_ob_minlae2                                             # 3, 5, 10  
   {  
    my ($feld, $wert) = @_;  
    if (length($wert) < 2) {return 0} else {return 1}           # 3, 5, 10  
   }  

Was mich darn stört, ist, dass bei den Routinen test_ob_minlae für jede Länge eine eigene Routine angegeben ist.
Gibt es eine Möglichkeit, in den einzelnen Regeln der %prueftab die Länge anzugeben und in    e i n e r    Routine test_ob_minlae diesen Parameter abzufragen?

  1. Hallo Kurti!

    Was mich darn stört, ist, dass bei den Routinen test_ob_minlae für jede Länge eine eigene Routine angegeben ist.
    Gibt es eine Möglichkeit, in den einzelnen Regeln der %prueftab die Länge anzugeben und in    e i n e r    Routine test_ob_minlae diesen Parameter abzufragen?

    Wenn ich richtig verstanden habe, soll je nach Textfeld auf eine unterschiedliche Mindestlänge geprüft werden, diese ist mal 2, mal 3, mal 5, mal 10?

    Wenn ja, dann würde in der Tat eine Funktion reichen, der man die gewünschte Länge, die zu prüfen ist, als Parameter übergibt:

    sub min_length {  
        my ($len, $feld, $wert) = @_;  
        length($wert) < $len ? return 0 : return 1;  
    }
    

    Dafür müsste man in dem HoA (Hash of Arrays) die Länge mit angeben:

       $prueftab{'Name'}=[3, \&test_mussfeld,\&min_length,\&too_much_chars,\&too_much_digits,\&test_ob_Name];  
    #                     ^ Hier Länge,       ^geändert
    

    Und das jeweilige Array enstprechend shiften:

       my $feld = shift;  
       my $wert = shift;  
       my $len = shit @{$prueftab{$feld};    # HIER  
       for my $code_ref ( @{$prueftab{$feld}}) {  
          my $erg = $code_ref->($len, $feld, $wert); # und natürlich die Länge als Paramter übergeben  
    # ...  
       }
    

    ... ungetestet.

    Viele Grüße aus Frankfurt/Main,
    Patrick

    --
    _ - jenseits vom delirium - _

       Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
    Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
    1. Shit, was klingt shift auch so ähnlich...

      my $len = shit #!#!#!

        
      my $len = shift @{$prueftab{$feld}};  
      #                                 ^ fehlende Klammer wieder da  
      
      

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --
      _ - jenseits vom delirium - _

         Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
      1. my $len = shit #!#!#!

        Ich finde, das macht den Effekt der eigentlich gemeinten Funktion nur noch deutlicher und führt zu einem sehr intuitiven Programmierstil! Analog dazu vielleicht noch puke statt pop?

        1. Hallo Pragma!

          Ich finde, das macht den Effekt der eigentlich gemeinten Funktion nur noch deutlicher und führt zu einem sehr intuitiven Programmierstil! Analog dazu vielleicht noch puke statt pop?

          Leider perle ich in letzter Zeit weniger. Ich habe lange nicht mehr gepoppt...

          Viele Grüße aus Frankfurt/Main,
          Patrick

          --
          _ - jenseits vom delirium - _

             Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
          Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
          1. Leider perle ich in letzter Zeit weniger. Ich habe lange nicht mehr gepoppt...

            Wenn die Perlen nur zum puken sind, würd ich sie auch nicht poppen!

          2. Om nah hoo pez nyeetz,

            Ich habe lange nicht mehr gepoppt...

            Du armer!

            Matthias

            --
        2. my $len = shit #!#!#!

          Ich finde, das macht den Effekt der eigentlich gemeinten Funktion nur noch deutlicher und führt zu einem sehr intuitiven Programmierstil! Analog dazu vielleicht noch puke statt pop?

          Schon wieder ein Kritiker, der nur mäkelt, ohne konkret zu schreiben, wie es besser ginge!

          1. Hallo Kurti!

            Ich finde, das macht den Effekt der eigentlich gemeinten Funktion nur noch deutlicher und führt zu einem sehr intuitiven Programmierstil! Analog dazu vielleicht noch puke statt pop?
            Schon wieder ein Kritiker, der nur mäkelt, ohne konkret zu schreiben, wie es besser ginge!

            Nein, Pragma hat hier nicht kritisiert und auch nicht behauptet, den besseren Code zu haben, sondern sich lustig über meinen Tippfehler gemacht. Darüber kann man lachen und dagegen ist nichts einzuwenden ;)

            Shift happens... oder so.

            Viele Grüße aus Frankfurt/Main,
            Patrick

            --
            _ - jenseits vom delirium - _

               Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
            Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
            1. Schön dass Du das so siehst!
              Ich sehe es aber so:

              Ich finde, das macht den Effekt der eigentlich gemeinten Funktion nur noch deutlicher

              Die Funktion ist shit.
              Aber sei's drum.
              Gruß
              Kurti

              1. Ich sehe es aber so:

                Ich finde, das macht den Effekt der eigentlich gemeinten Funktion nur noch deutlicher
                Die Funktion ist shit.

                Da muss man sich IMHO aber schon Mühe geben, um es so zu verstehen - so gemeint war es definitiv nicht. Dem wissenschaftlichen Aspekt gebührend ein Exkurs:

                shift = erster Listenelement entfernen und zurückgeben
                shit = erstes Listenelement raussch.... - Das ist frappierend nah an der Wahrheit und entspricht dem FIFO Prinzip!

                Folglich folgendes Eigenzitat:

                Analog dazu vielleicht noch puke statt pop?

                pop = letztes Listenelement entfernen und zurückgeben
                puke = dass zuletzt verspeiste muss zuerst wieder raus!

                _DAS_ nenne ich intuitiv! ;-)

                1. Hallo Pragma!

                  shift = erster Listenelement entfernen und zurückgeben
                  shit = erstes Listenelement raussch.... - Das ist frappierend nah an der Wahrheit und entspricht dem FIFO Prinzip!
                  pop = letztes Listenelement entfernen und zurückgeben
                  puke = dass zuletzt verspeiste muss zuerst wieder raus!

                  Darf ich?

                  #!/usr/bin/perl -w  
                    
                  # Auf jeden Fall Warnungen einschalten!  
                    
                  use strict;  
                    
                  # Damit alles richtig (ab-)läuft;  
                    
                  my $meal;  
                  my $digestion;  
                  my @intestine;  
                  my @stomach;  
                  my $well-being;  
                    
                  if ($meal ne 'english cooking') {  
                    $digestion = 1;  
                    sleep(time()+43200)  
                    shit @intestine;  
                    $well-being = 1;  
                    popp();  
                  } else {  
                    sleep(0.0001);  
                    puke @stomach;  
                    $well-being = 0;  
                    toothbrush();  
                  }  
                    
                  sub popp {  
                    ... #wen du willst  
                  }  
                    
                  sub toothbrush {  
                    ... #1. Zahnbecher füllen, #2. Zahnbürste 3.# lange gurgeln  
                  }
                  

                  Viele Grüße aus Frankfurt/Main,
                  Patrick

                  --
                  _ - jenseits vom delirium - _

                     Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                  Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
                  1. Darf ich?
                    ...

                    :-))

                    Auf die Art könnte man sich als Info-Lehrer der Aufmarksamkeit seiner Schüler sicher sein.

                    PS: Direkt nach dem shitten poppen?

                    1. Hallo Pragma!

                      PS: Direkt nach dem shitten poppen?

                      Naja, ein use shower; wird eh vorausgesetzt ;)

                      Viele Grüße aus Frankfurt/Main,
                      Patrick

                      --
                      _ - jenseits vom delirium - _

                         Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                      Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
      2. Hallo Patrick,
        danke für Deine Hilfe.
        Gruß
        Kurti