sub curried { my @args = @_; sub { print(@args,@_); }; } $sub = curried("xyz"); $sub->(abc); #### { my $mysub = \&mysub; *mysub = sub { $mysub->('xyz', @_) }; } #### #! /usr/bin/perl -w use strict; sub_to_receive('123', curried(\&sub_to_be_passed,'xyz')); sub sub_to_be_passed { my ($one) = shift; my ($two) = shift; print "One: $one\n"; print "Two: $two\n"; } sub sub_to_receive { my ($x, $sub_to_run) = @_; $sub_to_run->("lalala"); } sub curried { my ($func,@args) = @_; sub { push @args, @_; $func->(@args); } }