http://www.perlmonks.org?node_id=357440


in reply to Subroutine Bewilderment

Calling conventions
Unless you really, really know what you're doing you should use subroutine($arg1,$arg2); to call any subroutine. AFAIK there is now no type of subroutine that MUST be called with a leading ampersand or without comma's seperating the arguments.

For methods; always use $object_or_class->methodname($arg,$arg2);

prototypes
If you use prototypes you can make it a little easier to use the other calling conventions but in general it's not needed unless you really want to write a subroutine that looks like a sort of operator on code blocks. Be sure to read up on prototypes before use, and only use them when you really need to.

defining and use of subs
If you don't use the default calling convention, you should define your subs (or a stub) before calling them. Subroutines that use "external" lexical variables that need to be intialized before calling should also be defined before calling (but that's just because you probably want the lexical initialisation near the definition of the sub).

summary
If you want to be safe, define your subs first and always use subroutine($arg,$arg2) unless you have a good reason not to.

Joost.