我是一个初级的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()函数的许多变体,但它们都返回上述的一些变体。
我试着建立这样的东西:
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
1条答案
按热度按时间wqsoz72f1#
第一点,
应该是
因为您需要一个associative array(即一个由字符串作为键的类似数组的结构),因此需要一个hash。
还有,
应该是
或
或
你想把
$allclients{$client}
引用的数组加上,所以@{ $allclients{$client} }
或$allclients{$client}->@*
。请参阅Perl Dereferencing Syntax。是的,您从来没有显式地创建过任何多个数组以及对它们的引用,但是由于autovivification,这不是问题。