Hi Ron: Thank you for writing me a personal email! Time is our most valuable asset and I appreciate you giving me some of yours.
Though you didn't answer my question of what namespace to put CELL in, I understand why. Hopefully I will not be committing a gross oversimplification when I say that I hear you saying two things: 1. don't re-invent the wheel 2. don't bundle stuff together As to the first point: * Configuration. App::CELL's configuration model is inspired by Request Tracker. An App::CELL configuration file is actually a Perl module (written as a series of calls to a 'set' function) that is loaded using 'require'. Not only does this leverage Perl itself to do the parsing -- it provides great flexibility when it comes to defining configuration parameter values: they can be scalars, or they can be references to anonymous arrays, hashes, or subroutines. Maybe there's already a Config:: module that takes this approach, and I'm just not aware of it? * Error-handling. I was inspired by brian d foy's article "Return error objects instead of throwing exceptions" http://www.effectiveperlprogramming.com/2011/10/return-error-objects-instead-of-throwing-exceptions/ Though my implementation is slightly different than brian's, I share his reluctance to get into exception-throwing in Perl. App::CELL provides a generic status class (which is i18n-able, since it inherits from the message class). Functions can (but are not required to) return this status object on both success and failure. On success, the status is set to OK and the return value can be retrieved via a "payload" method. On failure, the status is set to a "non-OK" value and the error text (in the user's preferred language -- could even be "Australian English" :-) via a "text" method. Functions are then called like this: my $status = function_call( .. args ..); return $status unless $status->ok; my $result = $status->payload; When an error occurs, it "bubbles" back up the stack and can be handled wherever convenient. Can you point me to an existing module that does this? * Localization. Just today I "discovered" GNU gettext (and libintl-perl), which is clearly far superior to my first attempt at an i18n framework for Perl. No questions there. * Logging. App::CELL implements a simple logging mechanism (Log::Fast- based) that is integrated with CELL::Message objects. You are right that this could be perceived as an attempt to force people to use my logging mechanism instead of their preferred way. On the other hand, the configuration, error-handling, and i18n functions _need_ to log. So I guess I will need to provide a way for folks to overlay App::CELL's logging functions with their own. As to your second point (bundling). I will follow your suggestion and think about how I could enable people to use individual components. This is already possible with the current version of Api::CELL -- just not particularly convenient. Thanks again for sharing your thoughts and for taking the time to consider mine! Nathan On Fri, Jan 31, 2014 at 12:25 AM, Ron Savage <r...@savage.net.au> wrote: > Hi Nathan > > Thanx for reading the advice re naming modules, even if a little late! > > There are a wide range of modules on CPAN handling issue such as yours does, > and tying them together is not the way many of us work. > > For instance, I already use config modules, logging modules, etc, and have a > policy of not adopting a module which forces me to adopt several such things > just to get the feature I want. > > In the short term you can simply delete CELL via the PAUSE web interface. > > Then, I strongly suggest you have a think about such matters before deciding > what to do next. > > There is of course no reason you'd like my way of doing things, but just for > the record my choices are: > > o Config::Tiny (and if that's insufficient, Config::IniFiles) > > Yes, there's a vast array of config modules on CPAN. No-one needs them all, > but we all need a good one. > > o Log::Handler > > Correspondence will not be entered into :-). > > o Try::Tiny, perhaps combined with Throwable::Factory > > The latter is written by Toby Inkster, which is always a good sign. > > o Etc. > > Cheers > > -- > Ron Savage > http://savage.net.au/