Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6172[/thread]

Varianten eines Vergleichs parametrisierbar machen: Naja, zumindestens ist mir kein besserer



<< >> 5 Einträge, 1 Seite
DemoFreak
 2004-03-30 05:38
#81361 #81361
User since
2003-09-06
54 Artikel
BenutzerIn
[default_avatar]
...Topic eingefallen. :)

Ich möchte an einigen vielen Stellen etwas dieser Art machen:

Code: (dl )
$revsort = (($sortby<=4 or $sortby==9 or $sortby==18)?'no':'yes') unless $revsort;

(auf deutsch: in einigen Spalten einer Tabelle soll abhängig von der Spaltennummer standardmässig, so nix anderes angegeben wurde, reverse bzw. eben nicht reverse sortiert werden, oder vielmehr erstmal ein entsprechendes Flag gesetzt werden)

Nur die Werte und die Anzahl der Werte unterscheiden sich ständig. Da ich ja "<=4" auch "$sortby==0 or $sortby==1 etc." schreiben könnte, suche ich jetzt nach einer Idee, wie ich das Ganze mittels eines Parameters (eine Liste oder was weiss ich) übergeben könnte. Ideen? Ist, so wie ich mich kenne, bestimmt wieder ganz einfach und ich seh nur den Wald vor lauter Bäumen nicht... ;)
Gruss, Hannes
coax
 2004-03-30 09:15
#81362 #81362
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Da gibt es gleich mehrere Moeglichkeiten (TIMTOWTDI), zwei davon:

Code: (dl )
1
2
3
4
5
6
7
8
9
my $sortby = 9;

my @revsort_colids = (0..4, 9, 18);

my $revsort = 'no';
foreach my $colid (@revsort_colids) {
   if ($sortby == $colid) { $revsort = 'yes'; last; }
}
print "$revsort\n";


oder

Code: (dl )
1
2
3
4
5
6
7
my $sortby = 3;

my @revsort_colids = (0..4, 9, 18);

my $revsort = (grep { $sortby == $_ } (@revsort_colids)) ? 'yes' : 'no';

print "$revsort\n";


Bei der ersten Variante ist es offensichtlicher was passiert, wuerde ich der zweiten vorziehen!

Grusz Christian.
,,Das perlt aber heute wieder...'' -- Dittsche
kabel
 2004-03-30 10:23
#81363 #81363
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
[quote=DemoFreak,30.03.2004, 03:38]
Code: (dl )
$revsort = (($sortby<=4 or $sortby==9 or $sortby==18)?'no':'yes') unless $revsort;
[/quote]
der code enthält zwei annahmen über $revsort:
* das unless $revsort suggeriert die verwendung der perlschen wahrheit
* hinterher wird $revsort auf "yes"/"no" gesetzt

ich hab es deswegen mit 0/1 ersetzt;
Quote
kabel@kabel:/tmp$ cat asdf.pl
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use strict;

my $revsort = 0;
my $sortby = 18;

sub check {
        my $var = shift;
        my $bool = 0;
        foreach (@_) {
              $bool = 1 if eval "\$$var $_";
        }
        eval "\$$var = $bool";
}

print "revsort ist [$revsort]\n";
check ("revsort", "<=4", "==9", "==18") unless $revsort;
print "revsort ist [$revsort]\n";

kabel@kabel:/tmp$ perl -w asdf.pl
revsort ist [0]
revsort ist [1]
kabel@kabel:/tmp$
-- stefan
DemoFreak
 2004-03-30 18:18
#81364 #81364
User since
2003-09-06
54 Artikel
BenutzerIn
[default_avatar]
[quote=coax,30.03.2004, 07:15]Bei der ersten Variante ist es offensichtlicher was passiert, wuerde ich der zweiten vorziehen![/quote]
Und doch gefällt mir die zweite deutlich besser. :)
Warum auch immer. Dankeschön.
Gruss, Hannes
DemoFreak
 2004-03-30 18:23
#81365 #81365
User since
2003-09-06
54 Artikel
BenutzerIn
[default_avatar]
[quote=kabel,30.03.2004, 08:23][quote=DemoFreak,30.03.2004, 03:38]
Code: (dl )
$revsort = (($sortby<=4 or $sortby==9 or $sortby==18)?'no':'yes') unless $revsort;
[/quote]
der code enthält zwei annahmen über $revsort:
* das unless $revsort suggeriert die verwendung der perlschen wahrheit
* hinterher wird $revsort auf "yes"/"no" gesetzt

ich hab es deswegen mit 0/1 ersetzt[/quote][/quote]
Hhmm...

Also: der Parameter kann drei verschiedene Zustände annehmen: "wahr", "falsch" und "nicht vorhanden". Die sollen auch verschieden sein (es handelt sich da um einen CGI-Skript, wo der reversesort-Parameter nicht bei jedem Aufruf zwingend vorhanden sein muss, wenn er denn aber vorhanden ist, soll er bitteschön auch Widerhall finden). Wenn ich es recht verstehe, macht Deine Variante nunmehr zwischen "nicht vorhanden" und perlschem FALSE keinen Unterschied mehr, das ist aber nicht der Plan. ;)
Gruss, Hannes
<< >> 5 Einträge, 1 Seite



View all threads created 2004-03-30 05:38.