我是一名初級 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
uj5u.com熱心網友回復:
首先,
my @allclients;
應該
my %allclients;
因為你想要一個關聯陣列(即一個由字串作為鍵的類似陣列的結構),因此需要一個哈希。
還,
push @allclients{$client}{$i}, ...;
應該
$allclients{$client}[$i] = ...;
或者
push @{ $allclients{$client} }, ...;
或者
push $allclients{$client}->@*, ...;
您要添加到由$allclients{$client}, so@{ $allclients{$client} }或參考的陣列中$allclients{$client}->@*。請參閱Perl 取消參考語法。
是的,您從未顯式創建任何多個陣列以及對它們的參考,但這不是問題,這要歸功于autovivification。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473920.html
