Würde die Routine gerne verallgemeinern
Kurti
- perl
0 Patrick Andrieu0 Patrick Andrieu0 Pragma0 Patrick Andrieu0 Kurti0 Patrick Andrieu
0 Kurti
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?
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
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
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?
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
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!
Om nah hoo pez nyeetz,
Ich habe lange nicht mehr gepoppt...
Du armer!
Matthias
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!
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
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
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! ;-)
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
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?
Hallo Pragma!
PS: Direkt nach dem shitten poppen?
Naja, ein use shower; wird eh vorausgesetzt ;)
Viele Grüße aus Frankfurt/Main,
Patrick
Hallo Patrick,
danke für Deine Hilfe.
Gruß
Kurti