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.

Reply via email to