我有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
实现此功能。
请帮忙。
答案 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
}
}