I've been working on a new module (tentatively named Sub::Parms).

use Sub::Parms qw (:ignorecase :validate); sub some_method { MethodParms := $self, %args; my ($field_value, $another_field_value) = @args{'field_value','a +nother_field'}; } sub some_function { ParmsHash := %args; my ($field_value, $another_field_value) = @args{'field_value','a +nother_field'}; } sub _legal_thing { unless (defined ($_[0])) { return (0. 'Not defined'); } unless (int($_[0]) eq $_[0])) { return (0, 'Not an integer'); } return 1; } sub bind_parms_example { BindParms : ( my $handle := handle [required, is_defined, can=param]; my $thing := thing [optional, isa=CGI::Minimal]; my $another_thing := another [optional, type=SCALAR, validate=_leg +al_thing]; my $yathing := yathing [optional, is_defined]; my $defaulted := dthing [optional, default="help me"]; ) # ..... }

The problem is, it solves the same problem as a half-dozen other modules do: How do you simply, quickly and elegantly parse named parameters passed to a function/method?

I think my module brings something new and useful to the problem (why else would anyone ever write a module?): It provides clarity in code, is much faster (3 to 4 times) than any other module that solves the same problem and provides a simple way to turn off parameter validation assertions for a module in mature code to get even more performance out of it.

But is that enough to justify yet another module solving the same problem?

Or should I just file it in Acme::* for people's entertainment and edification?