Why doesn't Perl 6's colon pair and name interpolation work together?

Viewed 331

I was playing around with Interpolating into names. I was mostly interested in this colon syntax feature to turn a variable into a pair where the identifier is the key.

my %Hamadryas = map { slip $_, 0 }, <
    februa
    honorina
    velutina
    >;

{
my $pair = :%Hamadryas;
say $pair;   # Hamadryas => { ... }
}

put '-' x 50;

But, just for giggles, I wanted to try it with variable name interpolation too. I know this is stupid because if I know the name I don't need the colon syntax to get it. But, I also thought that it should work by accident:

{
my $name = 'Hamadryas';
# Since I already have the name, I could just:
# my $pair = $name => %::($name)

# But, couldn't I just line up the syntax?
my $pair = :%::($name);  # does not work
say $pair;
}

Why doesn't that :%::($name) syntax work? That's more a question of when the parser decides that it's not parsing something it wants to understand. I figured it would see the : and start processing a colon pair, then see the % and know it had a hash, even though there's the :: after the %.

Is there a way to make it work with tricks and grammar mutations?

0 Answers
Related