如何在 Perl 6 中动态定义变量名?

How to define variable names dynamically in Perl 6?

我想在另一个字符串变量中给一个变量起一个名字: my $name = '$a'; 或简单地 my $name = 'a'; 如何创建变量并使用它?我的意思是这样的(但它不起作用):

my $name = '$a';
my {$name} = 1; # Doesn't work
say $a; # should be 1

更一般的情况。我有一个变量名列表,比如 my @names = '$aa' ... '$cc'; 如何声明和使用变量,其名称将是例如@names[2]?

根据 documentation 词法填充(符号 table)在编译后是 immutable。此外(根据相同的文档)这意味着 EVAL 不能用于将词汇符号引入周围的范围。

我建议你使用包变量,而不是评论中建议的词法变量。

但是,一个解决方法是可行的:您可以在 运行 时间(对于需要的模块)使用例如 require MODULE:

创建自己的词汇表
my $name = '$a';
spurt 'MySymbols.pm6', "unit module MySymbols; use v6; my $name = 1; say \"\$name = $name\"";
use lib '.';
require MySymbols;

输出:

$a = 1

词法作用域是不可变的,但您可以采用 ::($name)MY::($name).

的方式
my $a; # required or it will generate an error

my $name = '$a';

::($name) = 1;
say $a;          # 1

MY::($name) = 2;
say $a;          # 2

sub foo ($name,$value) { CALLER::MY::($name) = $value }
foo($name,3);
say $a;          # 3