我正在玩Interpolating into names。我最感兴趣的是这个冒号语法功能可以将变量转换为标识符为关键字的对。
my %Hamadryas = map { slip $_, 0 }, <
februa
honorina
velutina
>;
{
my $pair = :%Hamadryas;
say $pair; # Hamadryas => { ... }
}
put '-' x 50;
但是,只是为了咯咯笑,我想用变量名插值来尝试它。我知道这是愚蠢的,因为如果我知道这个名字,我不需要使用冒号语法来获取它。但是,我也认为它应该是偶然的:
{
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;
}
为什么:%::($name)
语法不起作用?这更像是一个问题,解析器何时决定它不解析它想要理解的东西。我想它会看到:
并开始处理一个冒号对,然后看到%
并知道它有一个哈希值,即使::
之后有%
。
有没有办法让它与技巧和语法突变一起工作?