Der Code ist fehlerhaft in seiner Logik.
# bar:
my (@sql_output, %sql_info) = foo();
#foo:
return (\@sql_output, \%sql_info);
foo() liefert 2 Werte zurück, nämlich 2 Referenzen; die erste auf einen Array, die zweite auf einen Hash.
innerhalb von bar() nimmst Du diese beiden Referenzen entgegen und packst
*BEIDE* in einen Array @sql_output; der Hash %sql_info bekommt nix ab.
Wo bitte
dereferenzierst Du die
Referenzen?
"croak @sql_output" gibt das richtige aus, denn
$sql_output[0] = ARRAY-ref
$sql_output[1] = HASH-ref
...
Wenn man es richtig macht, geht nix verloren:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use strict;
use warnings;
sub foo {
my @array = ( 1, 2 );
my %hash = ( a => 'A', b => 'B' );
return \@array, \%hash;
}
sub bar {
my ( $aref, $href ) = foo();
print "Ref: $aref - $href\n";
for ( @$aref ) {
print "Array: $_\n";
}
for ( keys %$href ) {
print "Hash: $_ => $href->{$_}\n";
}
}
bar();
update: Grammatikfehler ausgebessert.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!