> On 01 Jan 2016, at 17:49, Lloyd Fournier (via RT)
> <[email protected]> wrote:
>
> # New Ticket Created by Lloyd Fournier
> # Please include the string: [perl #127112]
> # in the subject line of all future correspondence about this issue.
> # <URL: https://rt.perl.org/Ticket/Display.html?id=127112 >
>
>
> role Foo {
> sub foo { };
> BEGIN &foo.wrap(-> {});
> }
One should realize that a role is nothing but a place-holder for code to be
inserted when it is either does’d by a class, or punned into a class. It
doesn't execute code in the mainline of the role after it has been parsed.
Unless you use BEGIN of course.
If you remove the BEGIN from you example, I *think* it does what you expect it
to:
role Foo {
sub foo { };
&foo.wrap(-> { "foo" });
say "mainline";
method a { foo }
}
BEGIN say "role done";
say Foo.a
==============================
role done
mainline
foo
Note that the “mainline” is executed *after* the BEGIN block after the role.
Disallowing BEGIN blocks inside a role, might be an option. OTOH, there might
be valid uses for that as well, doing MOPpy things.
So, all in all, I think this is a case of an LTA error. Is that what you
intended to report?
Liz