Thread Kann Hash nicht übergeben (5 answers)
Opened by roooot at 2008-06-16 23:27

Linuxer
 2008-06-17 00:34
#111110 #111110
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
Der Code ist fehlerhaft in seiner Logik.

Code: (dl )
1
2
3
4
5
# 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:

Code (perl): (dl )
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
#!/usr/bin/perl
# vi:ts=4 sw=4 et:
use strict;
use warnings;


sub foo {

    my @array = ( 1, 2 );
    my %hash  = ( a => 'A', b => 'B' );

    return \@array, \%hash;
}


sub bar {

    # Skalare weil 2 Referenzen geliefert werden; KEIN ARRAY+HASH
    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!

View full thread Kann Hash nicht übergeben