Thread Hashref bei anonymer Funktion
(25 answers)
Opened by Froschpopo at 2007-12-28 05:40
ich brauche ca. 10 Statements innerhalb einer Funktion. Wenn ich jedes Statement in eine eigene Sub auslagere, wirds zuviel Code, weil die vielen Parameter in den Subs erstmal entgegengenommen werden müssen (shift, @_, usw.).
ich brauche schließlich in jeder Sub das Datenbankhandle welches ich in $dbh festhalte. Das sieht dann teilweise so aus (man beachte die Nummern) Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 sub profile { my ($dbh, $sql, $cgi, $cache) = @_; my $first_name = $cgi->param(...); my $last_name = $cgi->param(...); my $city_name = $cgi->param(...); my $tier_name = $cgi->param(...); my $phone_prv = $cgi->param(...); my $phone_mbi = $cgi->param(...); my $phone_biz = $cgi->param(...); # hier entstehen viele weiter Variablen, nicht alle aus $cgi, viele auch aus Unterprozessen, Abfragen und Rechenergebnisse. my @fields = (...); my %where = (...); my @tables = (...); my @order = (...); my ($stmt, @bind) = $sql->select(\@tables, \@fields, \%where, \@order); my $sth = $dbh->prepare($stmt); $sth->execute(@bind) or die $errors->output($DBI::errstr); my @fields2 = (...); my %where2 = (...); my @tables2 = (...); my @order2 = (...); my ($stmt2, @bind2) = $sql->select(\@tables2, \@fields2, \%where2, \@order2); my $sth2 = $dbh->prepare($stmt2); $sth2->execute(@bind2) or die $errors->output($DBI::errstr); my @fields3 = (...); my %where3 = (...); my @tables3 = (...); my @order3 = (...); my ($stmt3, @bind3) = $sql->select(\@tables3, \@fields3, \%where3, \@order3); my $sth3 = $dbh->prepare($stmt3); $sth3->execute(@bind3) or die $errors->output($DBI::errstr); } INNERHALB der profile() werden einige Variablen erschaffen, die ich, wenn ich die Abfrage in eine anonyme Sub einbette, nutzen kann. Würde ich für jede Abfrage eine eigene Sub machen, müsste ich ettliche Variablen als Parameter übergeben. Dabei gibt es Reihenfolgen einzuhalten, sie müssen benannt werden etc. Da ist es einfacher, die oben einzubetten, insbesondere deshalb, weil die Abfragen selbst relativ klein sind und sich meistens auf ca. 30 Zeilen beschränken. |