3

我有 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.

请帮忙。

4

2 回答 2

4

您正在$link_name用作符号引用,这是不允许的use strict 'refs'
尝试改用哈希,例如

my %map = (
    App1 => \@App1_links,
    ...
);
my $link_name = $map{$app_name};
于 2012-07-19T18:41:02.337 回答
4

正如我在其他地方所说,当您发现自己为变量名添加整数后缀时,请考虑“我应该使用数组”

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
    }
}
于 2012-07-19T18:47:23.440 回答