Ha. Java has one... but it's not very pretty. Just like anything Java, it's bloated, overly verbose, and clunky. Java just discovered "lambdas" a couple years ago with jdk 8. But functional languages have had lambda syntax for years.
Ocaml: List.map((*) 2)[1;2;3;4;5] Haskell: map (2*)[1,2,3,4,5] And lots more examples here: http://c2.com/CGI/wiki?MapFunction Then of course there's "whatever" syntax in Perl 6: map * ** 2, [1,2,3,4,5] On Sat, May 14, 2016, 3:42 PM lee <l...@yagibdah.de> wrote: > Uri Guttman <u...@stemsystems.com> writes: > > > On 05/12/2016 08:04 PM, lee wrote: > >> ... I appreciate perl for: > >> > >> > >> $dbh->do("INSERT INTO $T_ENTRIES (" . > >> join(', ', map($dbh->quote_identifier($_), $cgi->param)) . ') > VALUES (' . > >> join(', ', map($dbh->quote($_), map($cgi->param($_), > $cgi->param))) . ')') > >> if(scalar($cgi->param) == 111); > >> > > not bad but i have a few improvements that you may like. > > > > i would not call $cgi->param so often. easy enough to use arrays. > > > > my @cgi_params = $cgi->param() ; > > my @cgi_values = $cgi->param( @cgi_params ) ; > > Oh, I didn't know you can do > 'my @cgi_values = $cgi->param(@cgi_params);', thanks! > > How does that play out? > > my @cgi_values = $cgi->param($cgi->param); > > And hence: > > $dbh->do("INSERT INTO $T_ENTRIES (" . > join(', ', map($dbh->quote_identifier($_), $cgi->param)) . ') > VALUES (' . > join(', ', map($dbh->quote($_), $cgi->param($cgi->param))) . ')') > if(scalar($cgi->param) == 111); > > ? > > You could make that: > > > if (scalar($cgi->param) == 111) { > my $i = join(', ', map($dbh->quote_identifier($_), $cgi->param)); > my $v = join(', ', map($dbh->quote($_), $cgi->param($cgi->param))); > > $dbh->do("INSERT INTO $T_ENTRIES ($i) VALUES ($v)"); > } > > > Would that work? > > > i like to build up the sql parts outside of the call and to use ? > > placeholders which are quoted for you. > > > > my $holders = join ',', ('?') x @cgi_params ; > > > > and i like here docs for sql so i can see the sql and not need all > > those quotes and noise. also assigning the sql to a scalar so i can > > print it out for debugging > > > > my $sql = <<SQL ; > > INSERT INTO $T_ENTRIES ( $holders ) VALUES ( $holders ) > > SQL > > > > my $sth = $dbh->prepare( $sql ) ; > > $sth->execute( @cgi_params, @cgi_values ) ; > > Don't you need (properly quoted) identifiers rather than place holders > where the identifiers go? > > > if (scalar($cgi->param) == 111) { > my @cgi_params = $cgi->param(); > my @cgi_values = $cgi->param( @cgi_params ); > @cgi_params = map($dbh->quote_identifier($_), @cgi_params); > > unless (scalar(@cgi_params) != scalar(@cgi_values)) { > my $identifiers = join(', ', @cgi_params); > my $holders = join(', ', ('?') x scalar(@cgi_values)); > > my $sql = <<SQL; > INSERT INTO $T_ENTRIES ( $identifiers ) VALUES ( $holders ) > SQL > > my $sth = $dbh->prepare( $sql ); > $sth->execute(@cgi_values); > $sth->finish(); > } else { > print $cgi->p('ERROR: perhaps do something') . "/n"; > } > } > > > Which version is better for performance? > > > it may look longer but it is easier to read, debug and reuse this > > way. it can be made into a sub with other options (selecting or where > > clauses, etc.). > > > > i didn't add in the if condition but that can be put in front of this > code. > > I guess I just happened to finally learn the 'map()' function and > immediately found it extremely useful and elegant :) > > Are there other programming languages having the same, or an equivalent? > > -- > To unsubscribe, e-mail: beginners-unsubscr...@perl.org > For additional commands, e-mail: beginners-h...@perl.org > http://learn.perl.org/ > > >