我遇到了返回字符串[] []的问题。我无法返回整个阵列 第二个问题是
@language[$id] = [@$eng];
@return = [[@language[$id]],[@$eng]];
当我使用foreach循环遍历2d数组(@return)时。它给了我一些输出 字:
ARRAY(0x30ae1b4)ARRAY(0x30ae1e4)
... Hello.2 .....
字:ARRAY(0x30ae534)ARRAY(0x30ae574)...
请帮忙......
sub nextWord{
my @return = [];
for my $id(1 .. 3)
{
my $eng = $db->selectall_arrayref("select word from words
left outer join language
on words.languageId = language.languageId
where words.languageId = $id
order by word asc
;"); #limit 10 offset $currentOffset
@language[$id] = [@$eng];
@return = [[@language[$id]],[@$eng]];
foreach my $row (@return)
{
print "word: @$row ...\n";
print " Hello.". @$row.".....\n";
}
$currentOffset+=10;
}return @return;
}
答案 0 :(得分:2)
@language[$id] = [@$eng];
应该是
$language[$id] = [@$eng];
我不明白你想要存储在@return
中的内容,但是你存放了拧干的东西。
@return = [[@language[$id]],[@$eng]];
您正在分配数组引用。
您是否曾阅读过perldoc perldsc,因为之前人们已经建议过您,以及其他perl引用?
如果您想循环selectall_arrayref
的结果,可以执行以下操作:
foreach my $row (@$eng) { # What the hell is $eng anyway? Use meaningful variable names please
print "Word: $row->[0]\n";
}
如果您想将查询中的单词arrayref分配到$language[$id]
,Dre的答案很好
答案 1 :(得分:1)
DVK部分正确,但是selectall_arrayref已经返回了一个二维数组:
[ ['word1'], ['word2'], ['word3'] ]
您需要执行以下操作:
$language[$id] = [ map { $_->[0] } @$eng ];
答案 2 :(得分:0)
只需完成DVK答案:在perl中,@ sigil用于指代整个数组或子数组。单个数组元素(或哈希元素)是标量,因此请使用$ sigil。
为了说明Dre的回答,我将补充一点,如果你的标量包含一个数组或哈希引用,你可以通过在前面添加正确的sigil来取消引用它:
$scalar = [ 1, 2]; @array = @$scalar
您还可以引用一个本身就是数组的子数组:
my @array = qw( this that goat cheese);
print @array[2,3];
显示'goatcheese'。