2012-07-19 49 views
3

我有4個應用程序。讓我們給他們打電話:App1,App2,App3和App4。perl不能使用字符串作爲數組參考

爲每個應用程序我有一個數組:例如:

my @App1_links = (...some data...); 
my @App2_links = (...some data...); 
my @App3_links = (...some data...); 
my @App4_links = (...some data...); 

現在,我有我的代碼,會突破這4個應用程序一個循環,我打算做這樣的事情:

my $link_name = $app_name . "_links"; 
    where $app_name will be App1, App2 etc... 

and then use it as : @$link_name 

下面這段代碼做什麼,我打算做的時候我不使用:use strict而不是其他

The error is: Can't use string ("App1_links") as an ARRAY ref while "strict refs" in use at code.pm line 123. 

如何使用use strict實現此功能。

請幫忙。

+0

這將是很好,如果你提供更有意義的片段。你有這些名稱的數組,並試圖訪問它們? – user4035 2012-07-19 18:38:35

+0

我以爲我給了足夠的信息。請告訴我這篇文章中含糊不清,我可以修復它。名字可以是任何東西,但這個想法就是我想要表達的東西,並將重點轉移給你。 – soothsayer 2012-07-19 18:48:51

回答

4

您正在使用$link_name作爲symbolic reference,根據use strict 'refs'不允許。
嘗試使用散列代替,例如

my %map = (
    App1 => \@App1_links, 
    ... 
); 
my $link_name = $map{$app_name}; 
+0

感謝您的解決方案。讓我試試這個。 – soothsayer 2012-07-19 18:53:38

+0

工程。非常感謝! – soothsayer 2012-07-19 19:26:28

4

正如我在別處說的,when you find yourself adding an integer suffix to variable names, think "I should have used an array"

my @AppLinks = (
    \@App1_links, 
    \@App2_links, 
    \@App3_links, 
    # ... 
); 

for my $app (@AppLinks) { 
    for my $link (@$app) { 
     # loop over links for each app 
    } 
} 

for my $i (0 .. $#AppLinks) { 
    printf "App%d_links\n", $i + 1; 
    for my $link (@{ $AppLinks[$i] }) { 
     # loop over links for each app 
    } 
} 
+0

我的循環正在經歷4個應用程序,因此我需要連接並獲取link_name。我將不得不改變很多代碼來遍歷數組。任何其他想法? – soothsayer 2012-07-19 18:51:37

+0

我沒有看到任何有效的理由在這裏使用'no strict'refs';'。這樣做會「解決」你的問題,解決某些「解決問題」的價值。上面的代碼循環遍歷所有應用程序的所有鏈接。 – 2012-07-19 18:54:20

相關問題