#!/usr/bin/env perl
# Copyright (c) 2015 Christian Jaeger, copying@christianjaeger.ch
# This is free software. See the file COPYING.md that came bundled
# with this file.
use
strict;
use
warnings;
sub
foo {
my
$f
;
$f
=
sub
{
my
(
$n
) =
@_
;
my
$f
=
$f
;
# create a new, strong binding for f to prevent it
# from being freed (upon return from f)
sub
{
if
(
$n
> 0) {
$n
+ &{
&$f
(
$n
- 1) }
}
else
{
0
}
}
};
my
$f_
=
$f
;
weaken
$f
;
&$f_
;
}
my
$res
= &{ foo 2 };
$res
,
"\n"
;