2017-07-21 61 views
0

我有从SQL对象返回的数组值。使用连接来连接数组值

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

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

我需要创建此数组字符串: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); print Dumper @keys; Dumper的结果是$ 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)); 

这将给予

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

你想要的代码是

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

这就是说,它看起来->SelectAllArrayRef返回到基准结果,所以它应该被称为如下:

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然后向我们展示该背景请编辑问题并显示设置它的代码否则,你的前两次尝试是好的(最后一次会给你显示的,两个参考串) – zdim