Python has a tool called lambda that allows to create anonymous functions on the fly.

In the following example the make_incrementor function returns a new, anonymous function.

In Python using lambda

def make_incrementor(n):
    return lambda x: x + n

f3 = make_incrementor(3)
f7 = make_incrementor(7)

print(f3(2))    #  5
print(f7(3))    # 10
print(f3(4))    #  7
print(f7(10))   # 17

In Perl using anonymous functions

use strict;
use warnings;
use 5.010;

sub make_incrementor {
    my ($n) = @_;
    return sub {
        my ($x) = @_;
        return $x + $n; 
    }
}

my $f3 = make_incrementor(3);
my $f7 = make_incrementor(7);

say $f3->(2);    #  5
say $f7->(3);    # 10
say $f3->(4);    #  7
say $f7->(10);   # 17

In this code, the variable $n stays alive even after the call to make_incrementor ends as it is referenced from the anonymous function returned by make_incrementor.

$f3 and $f7 are references to the anonymous functions generated and returned by make_incrementor. If we printed out the content of these variables using say $f3 we would get something like this: CODE(0x7fe9738032b8) revealing the fact that they are indeed references to executable code.

The way to de-reference them is to write: $f3->(2).

Perl without extra local variable

sub make_incrementor {
    my ($n) = @_;
    return sub { $n + shift }
}

This could be use to replace the above implementation of the make_incrementor.