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.
sub function_called {
my $calls = 0;
return { return ++$callS }
}
or
A larger closure to enable a generic SQL template maker and
deployer.
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
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 ;-)
--
Brother Frankus.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.