> on boston.pm a thread arose about having named subs inside subs. of
> course perl5 can do it but they don't do anything useful but they do
> have some odd implemenation defined closure behavior.
>
> someone brought up lisp and scheme and how they do it (differently from
> each other).
>
> well, i want to dredge up how PL/I did it and i think it makes for a
> useful concept.
>
> my $c ;
>
> sub foo {
>
> my $a ;
> my $b ;
>
> blah
>
> bar() ;
>
> sub bar {
>
> $b = $a + $c ;
> }
> }
>
> first point is that bar is NOT a closure. it makes no copies of $a and
> $b into a pad. bar uses the actual $a and $b of foo on the stack. it
> should do work the same for foo's params.
I might be misunderstanding you, but how is this different
(semantically) from a lexical named closure?
my $c;
sub foo() {
my $a;
my $b;
my sub bar() {
$b = $a + $c;
}
bar();
}
Bar can be recursive. $a and $b still refer to foo()'s $a and $b.
Bar can even trivially have nested subs. bar() can't be seen from
outside foo. I don't see the difference. Perhaps you could give a
better example in how this differs?
Luke