in reply to Re: goto &method and skipping call frame
in thread goto &method and skipping call frame

> Then show this more complicated implementation.

what's the problem with the question?

I linked the relevant docs.

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery

  • Comment on Re^2: goto &method and skipping call frame

Replies are listed 'Best First'.
Re^3: goto &method and skipping call frame
by shmem (Chancellor) on Mar 05, 2021 at 11:57 UTC

    One place where I've seen this technique is a ORM package on CPAN - Class::Tables - which auto-generates classes from table names and makes colum names into their methods using AUTOLOAD:

    sub AUTOLOAD { my $self = shift; (my $func = $Class::Tables::AUTOLOAD) =~ s/.*:://; croak qq{Can't locate object method "$func" via package "$self"} unless ref $self and UNIVERSAL::isa( $self, "Class::Tables" ); unshift @_, $self, $func; goto &field; }

    The field() sub translates its arguments to the appropriate SQL call against the database. I've used that package very much, and I have seen no adverse side effects. And no, I'm not aware of a cleaner way to do this.

    I'm still puzzled by the meaning of "AUTOLOAD is localized to a blocks context" part of your question. Does that mean having different lookup-results (depending on scope) for the last-resort AUTOLOAD sub?

    Sorry if I'm just being too dumb or having the wrong kind of humour. ;)

    perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'
      Thanks the example from Class::Tables is interesting. :)

      And I now understand goto &$method_ref seems to follow the @ISA chain.

      It doesn't, this was my brain fart. =)

      It's the ->can() which already returned the correct code_ref after following the inheritance chain

      And that's highlighting the difference to Class::Table, $func is a string not a ref.

      Additionally goto &field is not a dynamic call, it will always call the same sub field in the same package.

      Though ->field could be called as a method form other points, since it expects $self as first argument.

      Cheers Rolf
      (addicted to the Perl Programming Language :)
      Wikisyntax for the Monastery

Re^3: goto &method and skipping call frame
by shmem (Chancellor) on Mar 04, 2021 at 22:23 UTC
    what's the problem with the question I linked the relevant docs.

    No problem with your question, but probably with my answer. Sorry about that.

    perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'