sub greeting { my ($verb, $object) = @_; my $sub = defined $object ? sub { print "$verb, $object\n" } : sub { print "$verb, ", shift(), "\n" }; return $sub } my $hello = greeting('Happy Birthday', 'L~R'); $hello->(); my $bye = greeting('goodbye'); $bye->('Cruel World'); __END__ Happy Birthday, L~R goodbye, Cruel World #### greeting('Hello', 'Good Looking'); # prints immediately greeting('Woah'); # Waits ... greeting('Nelly'); # prints now that it has both arguments