Piers Cawley > > This may be a case of keep up at the back, but if that is a > method call, > > how do I call a subroutine from within a method ? > > [...] > > Yes, I know there's several different ways I could do it, but this > approach feels right.
I think this comes does to huffmann encoding: which things are common, and which are less common. This probably depends on what you are doing (what paradigm you are following), so its really a question about the nature of perl. The things I've heard people wanting to do are: call method on current topic call method on current invocant call class method on invocant's class call private subroutine defined in current class call global subroutine The following syntaxes have been seen: foo() .foo() ..foo() ## rejected because ".." is different binary op class.foo() FooClass.foo() ::foo() Package::foo() $foo() $_.foo() I see 2 partionings: * by scope: topic, self, named package, global * by invocant: instance, class, none My suggested resolutions: By Scope: global/ named package use the existing Foo::bar syntax; Topic uses unary . syntax; self uses nothing By invocant: infer from current invocant/topic; use &foo() for no invocant Thus, the perl5 transalations would be: foo() => $self->foo() .foo() => $_->foo() &foo() => foo() ::foo() => ::foo() Bar::bar() => Bar::bar() class.foo() => ref($self)->foo() .class.foo() => ref($_)->foo() &foo(self) => foo($self->self) => $self->self->foo() This assumes that C<class> and C<self> are defined in UNIVERSAL Dave.