Object oriented perl gives you exactly the same flexibility.
If you have a module called "My::Module", and you call "My::Module->some_method", then you'd implement that like:
sub some_method {
my ($pkg, @args) = @_;
i.e. the module gets passed (as a string) as the first argument. You can then call $pkg->some_other_method;
And similarly, if you have an object "$foo" you would call it like "$foo->some_other_method" and implement it as: sub some_method {
my ($self, @args) = @_;
i.e. the object gets passed as the first argument. And you can call "$self->some_other_method" with it.A minimal class is just:
package My::Module;
sub new {
my ($pkg, %opts) = @_;
my $self = bless \%opts, $pkg;
return $self;
}
1;
Don't let them tell you you need Moo or Moose or Mouse or fields.pm. Hand-rolled objects is the way :)