@array_dessen_name_in_$_steht = @{$complete{$_}};
Huuuh, symbolischer Zugriff, wie gruselig. Das ist eine schlechte Praxis, ich rate ab.
Beat hat dir schon geraten, den die Datenstruktur bzw. den Zugriff darauf zu überdenken. Du solltest einfach eine Hashref benutzen, siehe Seite 55 in Modern Perl.
$complete = {
foo => [qw(foo bar foo1 bar1)],
bar => [qw(foo2 bar2 foo3 bar3)],
};
Dort, wo du früher @foo
geschrieben hast, schreibst du stattdessen @{ $complete->{foo} }
, analog @bar
zu @{ $complete->{bar} }
. Du kannst über die Namen sehr einfach iterieren.
frob_array(@{ $complete->{$_} }) for qw(foo bar);
Pro-Tipp zum Schluss: immer die *n*store-Variante benutzen, siehe http://p3rl.org/Perl::Critic::Policy::Storable::ProhibitStoreOrFreeze