Kirrily Robert wrote:
> 
> I also think there's too much overhead in learning (and remembering)
> each library's quirks.  My most common mistakes when using CPAN or core
> modules occur when the modules have inconsistent interfaces and I forget
> which ones take hashes and which take hashrefs, etc.  Sure a quick RTFM
> sorts it out, but it's still annoying.

Absolutely. I've tossed around on [EMAIL PROTECTED] the idea of a
"Module::Interface" that would provide a common interface for module
authors, but nobody's bitten really. The idea would be to provide 2-3
very common, drop-in argument handlers so people don't have to write
buggy custom code. It would handle common stuff like:

   $obj = Class->new($required, $args, {opt => val, opt => val});

   $job = param(-name => 'job');

And allow flexible calling styles. For example, you might say:

   # import args() for argument validation
   use Module::Interface qw/args/;

   sub my_func (@) {
       my %args = args({ positional => [qw/name email phone/] }, @_);
   }

Which would allow you to call your function two different ways:

   my_func($name, $email, $phone);
   my_func(name => $name, email => $email, phone => $phone);

Of course, you wouldn't have to specify the "positional" parameter, this
would just be one of several options.

In addition, I've thought that you could create a clean new() and other
OO function implementations and let people say:

   use base 'Module::Interface';

To get rolling, with the understanding that their object would then have
things predefined in a certain way, that would hopefully get 80% of the
cases.

Thoughts? If there's interest I can whip this up and stick it on CPAN.

-Nate

Reply via email to