如何在 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_I
和 C_I
。由于这种复杂性,我想知道...
问题
perl 中有没有办法传入数组索引的名称?
那些不是数组,那些是散列(其他语言中的字典、关联数组)。这样, B_I
和 C_I
就被视为裸字字符串。如果这些是实际的数组,那么它们将被视为裸字函数调用,并且您必须在调用者中调用它们,并且不需要在那里引用。
由于您使用的是散列,因此键是字符串,并且您传入 'B_I'
将导致 $index
成为 B_I
的字符串,并且由于您的 {$index}
有一些在裸字字符串($
)中不允许的东西,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_I
和 C_I
。由于这种复杂性,我想知道...
问题
perl 中有没有办法传入数组索引的名称?
那些不是数组,那些是散列(其他语言中的字典、关联数组)。这样, B_I
和 C_I
就被视为裸字字符串。如果这些是实际的数组,那么它们将被视为裸字函数调用,并且您必须在调用者中调用它们,并且不需要在那里引用。
由于您使用的是散列,因此键是字符串,并且您传入 'B_I'
将导致 $index
成为 B_I
的字符串,并且由于您的 {$index}
有一些在裸字字符串($
)中不允许的东西,perl 会将它解释为变量而不是文字,并且一切都会完全按照你想要的方式工作。