Ja, das funktioniert nicht, denn es kommt dabei nur ein großer Array zurück und perl weiß nicht, welche Elemente aus dem ersten und welche aus dem anderen Stammen.
Lösung: Gib Referenzen auf Arrays zurück und dereferenziere sie nach Bedarf.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub foo
{
my $a = "a";
my @b = ("b");
my @c = ("c");
return ($a, \@b, \@c);
}
my ($a, $b, $c) = foo;
print "\@c "; print @$c; print "\n";
print "\@b "; print @$b; print "\n";
Wenn Du willst, kannst Du sie auch vor dem Verarbeiten wieder in Arrays verwandeln:
my @b = @$b;
my @c = @$c;
und dann normal mit @b und @c weiterarbeiten. Gaaaanz sauber wäre dabei @{$b}, um vollkommen klar zu machen, dass $b die Variable ist. Wenn Du zum Beispiel einen hash of hashes hast, ist das nötig und sinnvoll:
my @array = @{ $hash{'array'} };