Thread Funktion mit mehr als zwei Rückgabewerte - möglich? (5 answers)
Opened by HoHoHo at 2013-12-10 20:56

jan
 2013-12-10 23:02
#172538 #172538
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
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.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl

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:
Code (perl): (dl )
1
2
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:
Code (perl): (dl )
my @array = @{ $hash{'array'} };

View full thread Funktion mit mehr als zwei Rückgabewerte - möglich?