For me at present, at worst a closure does the job of a static variable, at best it can be likened to a very simple object1.
orsub function_called { my $calls = 0; return { return ++$callS } }
A larger closure to enable a generic SQL template maker and deployer.
I make no claims as to the accuracy of this code, it's a variation, of one I did a while ago, without nice validation or passing, but enough I hope to clarify what I meant ;-)sub late_bound_sql { my $string = join ('',@_); # collate args into SQL statement. my $late_bound_fields = m/ \? /g; # Count late bound fields. my $sql = $dbh->prepare($string); # Create sql template. return sub { return 0 if $#_ != $late_bound_fields; # bad param count. for (0..$#_) { # For each argument, assume in sequence. $sql->bind_param($_, $_[$_]); # Apply bind param. } if ($sql->execute()) { # Do _this_ sql. return 1; } else { return 0; } } } # Create closures. $lb1 = late_bound("INSERT INTO foo VALUES ( x = ?, y = ?) "); $lb2 = late_bound("INSERT INTO bar, VALUES (a = ?, b = NULL)"); # Use them. &$lb1(2,4); # Inserts x= 2, y= 4 to table foo. &$lb2("cuttlefish"); # Inserts a= cuttlefish, b= NULL to table bar
--Brother Frankus.
In reply to Re: Why Closures?
by frankus
in thread Why Closures?
by mothra
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |