From: [EMAIL PROTECTED]
> ------------------------------------------------
> On Thu, 19 Dec 2002 17:44:22 +0100, "Jenda Krynicky"
> <[EMAIL PROTECTED]> wrote:
>
> > This is:
> > sub createClosure {
> > my $x = shift;
> > return sub { print $x++,"\n" }
> > }
> >
> > $closure = createClosure( 5 );
> > $closure->();
> > $closure->();
> >
> > Closure is a function that references a variable lexical to the
> > scope it was created in even though the scope is long gone.
> >
> > Jenda
>
>
> Obviously I never did quite get that. But your explanation makes
> sense to me. So it is similar to what he had only rather than it being
> a reference directly (aka as a scalar) to the other value, it is a
> reference to a subroutine that then accesses the value?
Yes, that's it. :-)
And just like you can have several references to the same variable
you can have several closures referencing the same variable:
sub createClosures {
my $x = shift;
return sub {$x}, sub { ++$x }, sub {--$x};
}
($get,$inc,$dec) = createClosures( 5 );
print $get->(),"\n";
print $inc->(),"\n";
print $get->(),"\n";
print $dec->(),"\n";
print $get->(),"\n";
Jenda
===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed
to get drunk and croon as much as they like.
-- Terry Pratchett in Sourcery
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]