#!/usr/bin/perl -w
use strict;
{
my $closure;
sub func_w_closure {
print "Closure! ", $closure++, "\n";
func_w_closure($_[0]+1) if $_[0] < 3;
}
}
sub func_w_static {
my $static if 0;
print "Static! ", $static++, "\n";
func_w_static($_[0]+1) if $_[0] < 3;
}
func_w_closure(0);
func_w_static(0);
I'll use tilly's spoiler trick:
[~] $ dev/test/scope.pl
Closure! 0
Closure! 1
Closure! 2
Closure! 3
Static! 0
Static! 0
Static! 0
Static! 0
|
In other words, the closure is the same variable through all calls, including recursive ones, while each recursive call to the func_w_static gets its own copy.
The cool thing about that, of course, is that if you call func_w_closure again, you see that each recursive instance keeps its value!
The other difference is that closures can be shared among functions -- if you stick another function into the lexical scope of `$static' above, some_function and your new function will refer to the same variable.
-dlc |