2017-07-21 4 views
0

SQLオブジェクトから返される配列値があります。 8853, 15141joinを使用して配列の値を連結する

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

は、私はこの配列から文字列を作成する必要が

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

できます。

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

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

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

値はARRAY(0x5265498),ARRAY(0x52654e0)です。私はその配列への参照を考える。私はここで何が分からないのでしょうか?

+0

どのように '$ keys'は、あなたの' $ VAR1'例に関連していますか? – xxfelixxx

+0

my @keys = $ db_obj-> SelectAllArrayRef($ sql); 印刷ダンプ@キー;ダンパーの結果は$ VAR1 = [['8853']、['15141']]; – Kris1511

+0

配列リファレンスを 'my($ aref)= $ db_obj - > .... 'として取得します。perlでは、' $ keys'と '@ keys'は異なる変数(!)です。 '$ keys'は値を保持するスカラ変数であり、他のものへの参照です。 '@ keys'は配列です。詳細については、 'perldoc perlref'を参照してください。 – xxfelixxx

答えて

2

Dumperに配列を渡してはいけません。それは混乱する出力につながります。 $VAR1@keysのダンプではなく、$keys[0]のダンプです。代わりに、あなたは

print(Dumper(\@keys)); 

これは、あなたが望むのコードが、->SelectAllArrayRefがへの参照を返すように見える、と述べ

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

ある

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

を与えているだろうがやるべきその結果、次のように呼び出す必要があります。

このために
my $keys = $db_obj->SelectAllArrayRef($sql); 

print(Dumper($keys)); 

出力

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

そして、あなたは、あなたの質問に使用される方法のいずれかを使用することができます。

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

最初のバージョンは、あなたのために働く必要があります。

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

8853,15141 
+0

うまく動作していないようです:(文脈の中で...スクリプトの考えとして働くように思われます – Kris1511

+1

@ Kris1511次に、その文脈を見せてください。質問を編集し、これを設定するコードを表示してください。あなたの最初の2回の試みは良いです(最後のものは、あなたが見せてくれるもの、2つの参照文字列) – zdim

関連する問題