Re: RFC 152 (v1) Replace $self in @_ with self() builtin (not $ME)

[email protected] ("Michael Maraist")
Newsgroups perl.perl6.language.objects
Message-ID <[email protected]>
>    sub do_stuff {
>        my $self = self;
>        $self->{STATE}->{something} = @_;
>    }
>
>    sub error {
>        carp @_ if self->config('VerboseErrors');
>    }

I've never really seen anything like this before in other languages (Is that
good or bad?).  The closest is Java's odd use of the super function as the
first line of a constructor.

The first problem I see with this is in [my understanding of] how perl
handles objects currently.

func class csv;
is the same as
class->func( csv )
Which internally becomes a lookup for the proper func based on @ISA, but
ultimatly class gets unshifted onto the stack of parameters.
The only way I can see an easy way of hiding the passage of $self is by
offsetting @_ by one, making $_[ -1 ] = $self.  Which is obviously
unaddressible.  Self would simply make the internal c array-lookup to
[ -1 ].  Either this sort of space would always have to be available, or the
function itself would have to be flagged for it... As in:

sub do_stuff: method {
  my $this = self;  # I'm old fashioned, leave me alone
} # end do_stuff

All accesses to methods would then require the method function-attribute.
Otherwise self could just be an alias for shift.  In this way, you maintain
compatibility (except for those poor souls that currently use method,
locked)

-Michael
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.