in reply to Why are closures cool?

One of the potentially useful things you can do with closures is generate subroutines dynamically based on a template. To use a rather trivial example:
sub multiply_by { my $multiplier = $_[0]; return sub { return $_[0] * $multiplier; } } my $times2 = multiply_by(2); my $times10 = multiply_by(10); print &$times2(4), "\n"; print &$times2(6), "\n"; print &$times10(4) ,"\n"; # Results: # 8 # 12 # 40

Used in this way, closures essentially let you create custom subs that "freeze in" the behavior of params that were passed during their creation. I find this useful occasionally if I need to define arrays of related but not identical behaviors to apply to elements in a data set, for example.

You can also use closures to enforce strict data encapsulation, since they allow you to create variables that simply don't exist to the outside world.

Damian Conway's excellent book Object Oriented Perl has some good examples of real reasons you might want to use closures in Perl. He certainly explains it better than this off-the-cuff response does ;-)