in reply to Arcitectural considerations with modules

Move the methods into a base class and keep the functions in a module that uses Exporter and @EXPORT_OK. Then, any package that needs a function from the module can import it at will, separate from the methods in the base class.

Now, something else you need to be aware of - if you have a base class, every "sub" in that base class can be treated as a method, regardless of whether it thinks of itself as a method or not. For example:

package Functions; use base 'Exporter'; our @EXPORT_OK = qw( func1 ); sub func1 { ... } package Foo; use Functions qw( func1 ); sub new { bless {}, shift } # This is a method sub meth1 { my $self = shift; ... } package Bar; use base 'Foo'; package main; my $bar = Bar->new; $bar->func1();
That will call func1() living in the Foo package with the first argument being $bar. Try it out if you don't believe me.

My criteria for good software:
  1. Does it work?
  2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?