http://qs321.pair.com?node_id=166417

BazB has asked for the wisdom of the Perl Monks concerning the following question:

How would I go about creating a module that uses both OO and functional interfaces?

I tend to supply named arguments, and I get an error warning that there is an odd number of arguments in a hash assignment if I use a subroutine expecting $self as it's first argument.

I wouldn't think checking that the first argument is a reference is a solution - making pass-by-reference awkward is a Bad Thing :)

Below is a sample of _rough_ code that will only work as OO - how can it be transformed to work as a functional or OO module (like CGI.pm, for example - which I can't figure out :-) ).

package Foo; # use Modules; # set up @EXPORT, @EXPORT_OK etc for functional interface sub new { my $class = shift; my $self = {}; bless ($self, $class); } sub print_args { my $self = shift; my %args = @_; print $args{'foo'}, $args{'bar'}, "\n"; } package Bar; $obj = Foo->new(); $obj->Foo::print_args(foo => "Perl", bar => "Monks"); exit;
Cheers.

BazB