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 但这似乎不起作用。
首先,
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.
这不是问题
我是一名初级 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 但这似乎不起作用。
首先,
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.
这不是问题