Closure example:
sub rtn_closure {
my $i = shift;
return sub { $i++ };
}
# f's i starts at 5
my $f = rtn_closure(5);
print $f->(),"\n"; # Prints 5
print $f->(), "\n"; # Prints 6
# g gets a separate i that starts at 10
my $g = rtn_closure(10);
print $g->(), "\n"; # Prints 10
print $g->(), "\n"; # Prints 11
print $f->(), "\n"; # Prints 7
Callback example:
sub exec_callback {
my $f = shift;
$f->();
}
exec_callback(sub {print "hello\n"});
Does that help? A callback does not have to close over any variables, although it could. A closure occurs whenever a function refers to a variable in an outer scope.