(sub { print "I got called\n" })->(); # 1. fully anonymous, called as created my $squarer = sub { my $x = shift; $x * $x }; # 2. assigned to a variable sub curry { my ($sub, @args) = @_; return sub { $sub->(@args, @_) }; # 3. as a return value of another function } # example of currying in Perl sub sum { my $tot = 0; $tot += $_ for @_; $tot } # returns the sum of its arguments my $curried = curry \&sum, 5, 7, 9; print $curried->(1,2,3), "\n"; # prints 27 ( = 5 + 7 + 9 + 1 + 2 + 3 )