Perl: zuviel return?

- programmiertechnik
Hallo Leute,
ich habe hier zwei Subs, bei denen ich mir nicht so sicher bin...
Für welchen würdet Ihr euch entscheiden? Oder gar einen völlig anderen schreiben?
[code lang=perl]sub bp_cookie_check1 {
my $un;
return unless my $ck=$ENV{'HTTP_COOKIE'};
$ck=~s/\s|id=//g;
my $ch=$ck;
$ch=~s/\w+//;
return if $ch;
return unless open C,'<',"/tmp/anydir/$ck";
$un=<C>;
close C;
return $un if -f "/etc/anydir/Profiles/$un";
return;
}
sub bp_cookie_check2 {
if(my $ck=$ENV{'HTTP_COOKIE'}) {
$ck=~s/\s|id=//g;
my $ch=$ck;
$ch=~s/\w+//g;
unless($ch) {
if(open C,'<',"/tmp/anydir/$ck") {
my $un=<C>;
close C;
return $un if -f "/etc/anydir/Profiles/$un";
}
}
}
return;
}[code]
Für einen Tipp wäre ich dankbar :-)
Greez,
opi
Tag opi.
ich habe hier zwei Subs, bei denen ich mir nicht so sicher bin...
Für welchen würdet Ihr euch entscheiden? Oder gar einen völlig anderen schreiben?
Ich bin im Moment zu müde, um den Code zu durchforsten, aber du solltest dir überlegen, was genau deine Funktion zurückgeben soll, also was im Erfolgsfall und was im Misserfolgsfall. Das Thema scheint mir schon richtig gewählt: es gibt irgendwie zu viele returns in den Funktionen. So ins Unreine getippt:
use CGI qw/:standard/;
function is_cookie {
my $cn = shift;
my %values = cookie($cn);
# teste $values{'id'};
return $un;
}
Siechfred
ich habe hier zwei Subs, bei denen ich mir nicht so sicher bin...
Deine Abneigung gegen Module ist schon bewundernswert, da du dadurch mindestens das doppelte (vermutlich sogar noch viel mehr) an Zeit brauchst, um das Rad immer wieder zu erfinden.
Für welchen würdet Ihr euch entscheiden? Oder gar einen völlig anderen schreiben?
Ich würd's ein bisschen anders Formulieren:
sub bp_cookie_check1 {
my $ck = $ENV{HTTP_COOKIE} || return;
$ck =~ s/\s|id=//g;
my $ch = $ck;
$ch =~ s/\w+//;
return if $ch;
open C, "/tmp/anydir/$ck" || return;
my $un = <C>;
close C;
return -f "/etc/anydir/Profiles/$un" && $un;
}
Aber ansonsten ist es normal eine Funktion mit return zu beenden.
Struppi.
Hallo Struppi,
du mal wieder ;-)
Deine Abneigung gegen Module ist schon bewundernswert, da du dadurch mindestens das doppelte (vermutlich sogar noch viel mehr) an Zeit brauchst, um das Rad immer wieder zu erfinden.
nee, keine Abneigung. Es gibt so einiges an Modulen, welche ich einsetze und auch gerne. Aber es gibt viele Strukturen, in denen nur selbstgeschriebenes reinpasst und dabei ist der Lerneffekt auch sehr hoch, denn ich bin noch immer ein absoulter Perlnoob. Natürlich sollte man auch die Verwendung von CPAN-Modulen erlernen, aber wenn ich mich einzig und allein darauf einstelle, lerne ich nie die komplexen Datenstrukturen und Möglichkeiten von Perl kennen.
Um auf dein Beispiel zu kommen... ich würde es noch ein wenig anders formulieren:
sub bp_cookie_check1 {
my $ck = $ENV{HTTP_COOKIE} || return;
$ck =~ s/\s|id=//g;
return if $ck =~ /\W/;
open C, "/tmp/anydir/$ck" || return;
my $un = <C>;
close C;
## ich wollte $un zurück liefern
return $un if -f "/etc/anydir/Profiles/$un" && $un;
}
Das Beispiel mit den vielen return hatte ich in einem Skript von einem Kollegen entdeckt und fand es scheusslich, obwohl es sicherlich im Bereich des Möglichen ist, auch soviele return zu benutzen anstatt der vielen if's.
Wie immer danke schön.
Greez,
opi
Um auf dein Beispiel zu kommen... ich würde es noch ein wenig anders formulieren:
sub bp_cookie_check1 {
my $ck = $ENV{HTTP_COOKIE} || return;
$ck =~ s/\s|id=//g;
return if $ck =~ /\W/;open C, "/tmp/anydir/$ck" || return;
my $un = <C>;
close C;
## ich wollte $un zurück liefern
Mein Beispiel tut das.
return $un if -f "/etc/anydir/Profiles/$un" && $un;
Es reicht durchaus:
return -f "/etc/anydir/Profiles/$un" && $un;
}
>
> Das Beispiel mit den vielen return hatte ich in einem Skript von einem Kollegen entdeckt und fand es scheusslich, obwohl es sicherlich im Bereich des Möglichen ist, auch soviele return zu benutzen anstatt der vielen if's.
Du brauchst auch nicht immer die if's
Struppi.
--
[Javascript ist toll](http://javascript.jstruebig.de/)