2017-07-21 6 views
0

Ich habe Array-Werte, die vom SQL-Objekt zurückgegeben werden.Verwenden von Join zum Verketten von Array-Werten

my @keys = $db_obj->SelectAllArrayRef($sql); 
print Dumper @keys; 

gibt

$VAR1 = [ [ '8853' ], [ '15141' ] ]; 

I String aus diesem Array erstellen müssen: 8853, 15141.

my $inVal = join(',', map { $_->[0] }, @$keys); 

my $inVal; 
foreach my $result (@$keys){ 
    $inVal .= $result->[0]; 
} 

my $inVal = join(',', @$keys); 

Wert, den ich bekomme, ist ARRAY(0x5265498),ARRAY(0x52654e0). Ich denke seine Bezugnahme auf das Array. Irgendeine Idee, was fehlt mir hier?

+0

Wie steht '$ keys' zu Ihrem' $ VAR1' Beispiel? – xxfelixxx

+0

meine @keys = $ db_obj-> SelectAllArrayRef ($ sql); Drucken Dumper @Schlüssel; Ergebnis von Dumper ist $ VAR1 = [['8853'], ['15141']]; – Kris1511

+0

Sie würden eine Array-Referenz als 'my ($ aref) = $ db_obj -> .... erfassen.' In Perl sind '$ keys' und' @ keys' unterschiedliche Variablen (!). '$ keys' ist eine skalare Variable, die einen Wert oder eine Referenz auf etwas anderes enthält. '@ keys' ist ein Array. Siehe "perldoc perlref" für die blutigen Details. – xxfelixxx

Antwort

2

Nicht-Arrays passieren zu Dumper; es führt zu einer verwirrenden Ausgabe. $VAR1 ist kein Dump von @keys, es ist ein Dump von $keys[0]. Stattdessen sollten Sie

print(Dumper(\@keys)); 

Diese

Sie wollen gegeben hätte
$VAR1 = [ [ [ '8853' ], [ '15141' ] ] ]; 

Der Code getan haben, ist

join ',', map { $_->[0] }, @{ $keys[0] }; 

Das heißt, es scheint, dass ->SelectAllArrayRef gibt einen Verweis auf das Ergebnis, und so sollte es wie folgt heißen:

my $keys = $db_obj->SelectAllArrayRef($sql); 

Dazu

print(Dumper($keys)); 

Ausgänge

$VAR1 = [ [ '8853' ], [ '15141' ] ]; 

Und Sie können Sie in Ihrer Frage verwendet, eine der beiden Methoden.

join ',', map { $_->[0] }, @$keys; 
2

Die erste Version sollte für Sie arbeiten:

my $arr = [ [ '8853' ], [ '15141' ] ]; 
my $values = join(',', map { $_->[0] } @$arr); 
print $values . "\n"; 

8853,15141 
+0

Scheint nicht zu funktionieren ... :(im Kontext ... scheint als Skript zu funktionieren. – Kris1511

+1

@ Kris1511 Dann zeigen Sie uns bitte diesen Kontext. Bearbeiten Sie die Frage und zeigen Sie den Code, der das aufbaut. Deine ersten beiden Versuche sind gut (der letzte würde geben, was du zeigst, zwei Referenzbeschriftungen) – zdim