<?xml version="1.0" encoding="windows-1252"?>
<node id="268910" title="Re: Closure on Closures (beta)" created="2003-06-25 12:36:34" updated="2005-08-05 19:15:36">
<type id="11">
note</type>
<author id="186362">
adrianh</author>
<data>
<field name="doctext">
&lt;p&gt;++ Nice summary.&lt;/p&gt;

&lt;p&gt;Minor niggle. If it were me I would put a little bit more emphasis on lexical scoping and a little less emphasis on reference counting. When the value of a lexical variable is garbage collected is independent of whether a Perl closure is created. It's about scope - not memory usage. For example:&lt;/p&gt;

&lt;code&gt;
our $Global;

sub make_closure {
	my %lexical;
	$Global = \%lexical;
	return sub {
		my $key = shift;
		@_ ? $lexical{$key} = shift : $lexical{$key};
	};
};

{	
	# here we make a closure
	my $c = make_closure();

	# which we can use to set and get keys
	$c-&gt;(foo =&gt; 42);
	print "foo is ", $c-&gt;('foo'), "\n";
	
	# at the end of the scope the closure goes away
};

# but the referant is still around
print "Global foo is ", $Global-&gt;{foo}, "\n";
&lt;/code&gt;

&lt;hr&gt;

&lt;p&gt;Update: It might also be worth comparing what Perl does to languages without lexical capture like C.&lt;/p&gt;</field>
<field name="root_node">
268891</field>
<field name="parent_node">
268891</field>
</data>
</node>
