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

他の場所で言っているように、変数名に整数の接尾辞を追加していることに気付いたときは、「配列を使用すべきだった」と考えてください

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 に答える
4

で許可されていないシンボリック参照$link_nameとして使用しています。 代わりにハッシュを使用してみてください。use strict 'refs'

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