I always like input magic, but there are caveats: What if
the user decides to access your sub as a real function? That is,
xpkg::mproc()... and worse, if the user additionally throws
an hashref at the beginning? Your code wouldn't recognize
in reply to feedback on subroutine as both function and method in one
Check the following: is it a ref? If not, is it a string with
your package as a name? -&bt; you are called as a class.
Skip the first argument. If not, keep the first. If it is
a ref, is the ref equal to the name of your package? Than the first
argument is $self. If not, you need to keep the first argument.
You see, four possible cases here.
Just a nitbit: no memory allocation is needed in perl.