sub bind { my ($callback, @args) = @_; $callback->(@args); } #### bind(\&debug, "Entering xxx()"); ... bind(\&logit, "Username : $user logged in") ... and so on... #### sub bind { my $monad = shift;#self my $callback = shift; my @args = @_; my @res = $callback->(@args); $monad->pack_args(@res); return $monad } my $monad = new Monad; $monad->bind(\&debug, "Entering xxx()"); ... $monad->bind(\&logit, "Username : $user logged in") ... and so on...