Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:
I'm writing a module that, from the constructor, will accept essentially named parameters, and I'm wondering which of the two common ways of doing so is preferred.
Should I accept a single argument of a hashref:
# new MyModule({arg1 => 'val1', arg2 => 'val2'}) sub new { my $class = shift; croak('oh crap!') if ref($_[0]) != 'HASH' my %args = %{$_[0]}; }
Or should I cast all arguments into a hash:
# new MyModule(arg1 => 'val1', arg2 => 'val2') sub new { my $class = shift; croak('oh crap!') if @_ % 2; my %args = @_; }
I've seen both techniques used in many places, but which one is generally preferred and/or considered better API design?
Back to
Seekers of Perl Wisdom