On Fri, Jul 08, 2005 at 08:28:34PM +0200, Robin Redeker wrote: : On Fri, Jul 08, 2005 at 10:07:24AM -0400, Stevan Little wrote: : > I have never understood what is wrong with this: : > : > method foo ($self: $bar) { : > $self.baz() : > } : : Thats a fine option to have. : But therecomes another question to my mind: : what do i get with writing 'method' instead of : 'sub'? is it just for seperating subroutines and methods optically : or is there a deeper reason?
Several deeper reasons. Though I quibble at characterizing the optical reason as un-deeper when it might in fact be the deepest reason of all, or at least closely related to very deep psychological reasons. Off the top of my head: Subs are never inherited. Subs are not candidates for indirect object method calls. Perl will only call "sub new" when called as a subroutine. Subs create list operators, while methods don't. Method calls are allowed to be argumentless. Methods have access to instance variables. Mutating/nonmutating methods can be generated from each other. Explicit method declaration allows implicit invocant declaration. Distinguishing multi method from multi sub allows different strategies. : > Why does it have to be some sugared syntax when you can just simple : > name it in the parameter list? : : Yes, but there seem to be quite some people who want : a 'cool' syntax for it. (ie. ./method ()). I wasn't thinking 'cool', I was thinking 'visually distinctive and mnemonic'. I actually think o. is cooler. : No syntax at all, like in C++ just method() would : be the shortest. But larry says no, and everyone seems to : agree. Just to quibble again, I didn't just say 'no'. I also said, use self ""; And no, everyone doesn't seem to agree. :-) Larry