← Back to context

Comment by KaiserPro

2 days ago

Indeed!

It just grinds my gears that _I_ need to check to see if the caller has given me all the required bits. That seems like something the language should do.

I understand that it does give you a lot of flexibility, but Hnnnnnnnnn

(from what I recall object oriented perl doesn't give you this flexibility, but I'm not sure, as I never really did it. )

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 :)