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/
>
>
>

Reply via email to