大家好 我遇到的问题是我无法返回数组哈希中的值和键
sub nextWords{
for my $language(0 .. $#language )
{
my $eng = $db->selectall_arrayref("select word from words
left outer join language
on words.languageId = language.languageId
where words.languageId = $language
order by word asc
;"); # @language[$id] limit 10 offset $currentOffset
#%returnArray2d = (@language[$language] =>[@$eng] );
$returnArray2d{@language[$language]} = [@$eng];
}
return %returnArray2d;
}
我无法真正返回所有单词列表
my %newwordsList =NextWords();
foreach my $key(keys %newwordsList)
{
print "here you are 2 : " . $key . "\n";
for my $ind(0 .. @{$newwordsList{$key}}){
print "dzo" . $newwordsList{$key}[$ind] . "\n";
}
}
output: $key ==> 132 not 123
这个词无法打印..它只是打印一些
ARRAY(0x320d514)
ARRAY(0x320d544)
ARRAY(0x320d574)
ARRAY(0x320d5a4)
ARRAY(0x320d5d4)
ARRAY(0x320d604)
请帮助..谢谢
答案 0 :(得分:1)
看起来你没有正确设置%returnArray2d。
假设@language包含您想要的语言ID,而不是:
$returnArray2d{ @language[$language] } = [@$eng];
你会想要这个:
$returnArray2d{ $language[$language] } = [@$eng];
此外,您应该避免对数组和标量值使用相同的名称(它有效,但令人困惑)(请参阅代码中的@language / $ language)。
最后,您正在迭代%newwordsList的每个键,但是,您需要从迭代中减去1,这样您就不会超过数组的末尾:
for my $ind ( 0 .. @{ $newwordsList{$key} } ) {
应该是:
for my $ind (0 .. @{ $newwordsList{$key} } - 1) {
或者(正如大卫在评论中指出的那样),你可以这样做:
for my $ind ( 0 .. $#{ $newwordsList{$key} } ) {