如何在perl的foreach循环中创建变量数组名称

Tim*_*Tim 1 arrays perl foreach

我想在foreach循环中创建一个更改名称本身的数组

our $j = 1;

foreach $key ( sort keys %hash ){
    @array1 = $hash{$key};
    $j++;
}
Run Code Online (Sandbox Code Playgroud)

如何更改数组名称$j.像每个键一样,我的数组名称将会改变@array1, @array2, @array3....

zdi*_*dim 7

这需要符号引用,你不想这样做.这是一个危险的特性,其实际需要和只使用非常罕见的非常具体的原因.出于所有其他目的,还有其他更好的方法.例如,请参阅此页面.

而是使用阵列使用存储在另一个结构中的匿名数组

my @data;
foreach $key (sort keys %hash) {
    push @data, [ ... ];          # (populate with $hash data) 
}
Run Code Online (Sandbox Code Playgroud)

或哈希

my %data;
foreach $key (sort keys %hash) {
    my $name     = ...;            # work out a suitable key-name
    $data{$name} = [ ... ];        # populate with $hash data
}
Run Code Online (Sandbox Code Playgroud)

我不知道在arrayrefs中放什么,[ ... ]因为它没有说明散列中的内容.

在这种情况下,您的哈希值是arrayrefs是有意义的

my @data;
foreach $key (sort keys %hash) {
    push @data, $hash{$key}; 
}
Run Code Online (Sandbox Code Playgroud)

似乎适合这个问题,但实际上只是

my @data = map { $hash{$_} } sort keys %hash;
Run Code Online (Sandbox Code Playgroud)

或者,如果您不需要基于键的可预测订单

my @data = values %hash;
Run Code Online (Sandbox Code Playgroud)

但是我认为在将哈希数据存储在数组中之前还有更多的事情需要处理.

然后,您可以通过索引(或在哈希的情况下通过名称)引用单个数组(ref).