A06 states:
> Code
> ____________|________________
> | |
> Routine Block
> ________________|_______________ __|___
> | | | | | | | |
> Sub Method Submethod Multi Rule Macro Bare Parametric
[...]
> (It's not yet clear whether the C<Bare> vs C<Parametric>
> distinction is useful. Some apparently C<Bare> blocks are
> actually C<Parametric> if they refer to C<$_> internally, even
> implicitly. And a C<Bare> block is just a C<Parametric> block
> with a signature of C<()>. More later.)
S06 mentions Bare and Parametric only in the table of standard type
names (with a "at least this week" on top of it).
So, what are the types of the following Code references?
my $foo = sub ($x) { $x }; # isa Code, Routine, Sub?
my $foo = sub () { 42 }; # isa Code, Routine, Sub?
my $foo = -> $x { 42 }; # isa Code, Block, Parametric?
my $foo = { $^x }; # isa Code, Block, Parametric?
my $foo = { say }; # (uses $_) # isa Code, Block, Parametric?
my $foo = { 42 }; # isa Code, Block, Bare?
my $foo = -> { 42 }; # isa Code, Block, Bare?
FWIW, I don't think the distinction Bare<->Parametric is really useful.
And as there's no distinction between C<sub () {...}> and C<sub (...)
{...}> either, I'd vote for dropping the Bare<->Parametric distinction
and updating S06 accordingly.
--Ingo
--
Linux, the choice of a GNU | Wissen ist Wissen, wo man es findet.
generation on a dual AMD |
Athlon! |