在Perl中打印2d数组

时间:2011-02-18 17:03:03

标签: perl

我遇到了返回字符串[] []的问题。我无法返回整个阵列 第二个问题是

@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; 

}

3 个答案:

答案 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'。