Perl:多维数组和 "experimental push" 错误

Perl: Multidimentional arrays and "experimental push" error

我是一名初级 perl 程序员,对多维数组的经验很少。我什至不确定它是否适合该项目。

我有一个从文件中读入的客户端数组:

my @clientlist = grep(/[A-Z]\w+$/,readdir(DIR));

它生成如下列表:

$VAR1 = [
          'AA14A',
          'BB12R',
          'CC34M'
        ];

每个客户端都有一些未知数量的元素,这些元素是从另一个文件中读取的,这些元素与客户端名称相对应,例如:

__U_AA14A_0001, __U_AA14A_0002, __U_AA14A_0003
__U_BB12R_0001, __U_BB12R_0002, __U_BB12R_0003

当我尝试将相应的元素分配给客户端名称时:

   my @allclients;
   my $header = $string;
   my $i = 0; # index in array
   foreach my $client (@clientlist) {
        push @allclients{$client}{$i}, $header;
        $i += 1;
   }

它打印:

Useless use of push with no values at ./convert_domains.pl line 97.
Global symbol "%allclients" requires explicit package name (did you forget to declare 
"my %allclients"?) at ./convert_domains.pl line 97.
Experimental push on scalar is now forbidden at ./convert_domains.pl line 97, near "}
{"
syntax error at ./convert_domains.pl line 97, near "}{"

我还尝试了 push() 函数的多种变体,但它们都是 return 以上函数的一些变体。

我正在尝试构建类似的东西:

AA14A, __U_AA14A_0001, __U_AA14A_0002, __U_AA14A_0003
BB12R, __U_BB12R_0001, __U_BB12R_0002, __U_BB12R_0003

所以我可以遍历它并打印出各个元素。

我的主要问题是如何正确访问多维字符串数组。我也读过这个 perldoc 但这似乎不起作用。

https://perldoc.perl.org/perllol

首先,

my @allclients;

应该是

my %allclients;

因为您需要一个 associative array(即一个由字符串键入的 array-like 结构),因此需要一个散列。


此外,

push @allclients{$client}{$i}, ...;

应该是

$allclients{$client}[$i] = ...;

push @{ $allclients{$client} }, ...;

push $allclients{$client}->@*, ...;

您想添加到 $allclients{$client} 引用的数组中,因此 @{ $allclients{$client} }$allclients{$client}->@*。参见

是的,您从未显式创建任何多个数组和对它们的引用,但由于 autovivification.

这不是问题