如何在 perl 中传递数组索引的名称?

How do I pass in the name of an array index in perl?

背景

我试图将这四行代码提取到一个函数中:

my @firstList = split /\s+/, $doubleArray{A_I}{B_I};
@firstList = shuffle(@firstList);
my @secondList = split /\s+/, $doubleArray{A_I}{C_I};
@secondList = shuffle(@secondList);

因为唯一的功能差异是二维数组的第二个索引,所以我想将第二个索引("B_I" 和 "C_I")传递给一个函数。

建议的解决方案

换句话说,我想创建一个如下所示的函数:

my funkyFunc($){
     my $index = shift;
     my @list = split /\s+/, $doubleArray{A_I}{$index};
     @list = shuffle(@list);
     return @list;
}

我打算这样使用它:

my @firstList = funkyFunc("B_I");
my @secondList = funkyFunc("C_I");

但是,我不确定 perl 将如何解释 "B_I""C_I",或者 B_IC_I。由于这种复杂性,我想知道...

问题

perl 中有没有办法传入数组索引的名称?

那些不是数组,那些是散列(其他语言中的字典、关联数组)。这样, B_IC_I 就被视为裸字字符串。如果这些是实际的数组,那么它们将被视为裸字函数调用,并且您必须在调用者中调用它们,并且不需要在那里引用。

由于您使用的是散列,因此键是字符串,并且您传入 'B_I' 将导致 $index 成为 B_I 的字符串,并且由于您的 {$index} 有一些在裸字字符串($)中不允许的东西,perl 会将它解释为变量而不是文字,并且一切都会完全按照你想要的方式工作。