in reply to Re^2: Procedural vs OOP modules (mixing interfaces)
in thread Procedural vs OOP modules

Can you give an example where this makes sense?

When one wants to use such functions without instantiating an object first. But I guess one can use class methods (as per your definition) and *make sure* to consume the 1st param which will be the classname.

I think this might sabotage many patterns like sub-classing...

You mean because staticfunc will not be seen in a sub-class unless you do both: use base 'Class'; and use Class; ? I guess yes that's a problem.

I took a quick glimpse into static functions for C++ and Java and they look very much like class methods to me.

Yes, except that they don't mess with the parameters to provide a classname.

Do you suggest that there is no use-case for staticfunc(), but instead convert it into a class method and consume the 1st param, in order to provide accessing it without instantiation first? OK, fine. But I think it is important to provide access to such methods which do not need the state and can be called without instantiating a dummy object first which will be of no use whatsoever. So I think what I posted is useful, but I can edit it to use class methods when this dialogue ends.

bw, bliako

Replies are listed 'Best First'.
Re^4: Procedural vs OOP modules (namespace::clean)
by LanX (Saint) on Oct 29, 2021 at 14:03 UTC
    > Do you suggest that there is no use-case for staticfunc(),

    No I ask for use-cases justifying to deviate from Class->method() as default.

    Anything goes in Perl, but I'd like to know why a pattern was applied.

    I remember the Moo(se) folks using namespace::clean to wipe out any subs which are not part of the class, because otherwise they could be called as instance methods via the ISA chain.

    A Class->method() OTOH is capable to handle that case by checking if the first parameter $_[0] was blessed.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery