Thread 31C3 - Perl-Vortrag (Perl-Rant) (30 answers)
Opened by Raubtier at 2014-12-28 00:34

pq
 2015-12-30 17:21
#178989 #178989
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
hauptproblem ist IMHO CGI->param. die allermeisten aufrufe von param wollen eigentlich nur einen wert haben, daher sollte es eine extra-methode geben, wenn man mehrere werte erwartet.

Aber: CGI wollen wir ja eh nicht mehr benutzen, daher fliegt es ja auch ab 5.22 raus!
diese tatsache hat er aber weitgehend ignoriert.

CPAN:Plack::Request, CPAN:Dancer2, CPAN:Mojolicious zum beispiel sind alle anders gestrickt.

Plack::Request->parameters liefert CPAN:Hash::MultiValue
Code (perl): (dl )
1
2
3
my $foo = $hash->{foo};         # 'b' (the last entry)
my $foo = $hash->get('foo');    # 'b' (always, regardless of context)
my @foo = $hash->get_all('foo'); # ('a', 'b')


Dancer2: my $foo = params->{foo}
es steht allerdings nicht in der doku, ob man automatisch eine arrayref kommt, aber aus versehen eine liste ist hier auch nicht möglich.

Mojolicious:
Code (perl): (dl )
1
2
3
my @names       = $req->param;
my $value       = $req->param('foo');
my ($foo, $bar) = $req->param(['foo', 'bar']);

hier muss man also explizit eine array-referenz übergeben, somit ist hier aus versehen auch nichts zu exploiten.


DBI->quote ist IMHO der falsche angeklagte hier. wenn man übrigens sybase verwendet, hat man eh probleme mit dem einfachen prepare und execute mit platzhaltern, da wird die benutzung von quote unter umständen einfacher.

und list-flattening ist etwas, was man einmal verstehen und akzeptieren muss. wenn man es absolut nicht mag, muss man eben zu python oder sonstwohin wechseln.
Last edited: 2015-12-30 17:33:29 +0100 (CET)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread 31C3 - Perl-Vortrag (Perl-Rant)