perl不能将字符串用作数组引用

时间:2012-07-19 18:27:57

标签: perl reference perl-data-structures

我有4个应用程序。让我们称呼它们:App1,App2,App3和App4。

对于这些应用程序中的每一个,我都有一个数组:例如:

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实现此功能。

请帮忙。

2 个答案:

答案 0 :(得分:4)

您使用$link_name作为symbolic reference use strict 'refs'下不允许使用my %map = ( App1 => \@App1_links, ... ); my $link_name = $map{$app_name}; 。 请尝试使用哈希,例如

{{1}}

答案 1 :(得分: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
    }
}