in reply to calling from outside the closure a sub defined in a closure

You can't. You can use if the subroutine in local scope.
{ local $subRef = sub { $var = shift; print "hello monks --- [$var] \n"; }; &callFun(); } sub callFun { &$subRef(20); }
OR
{ $subRef = sub { $var = shift; print "hello monks --- [$var] \n"; }; } &$subRef;