如何在Perl中创建一个二维数组?

13
我正在尝试在Perl中创建一个二维数组。
我的代码:

my @array = ([1,2],[3,4]);

my @wordsList=();
my @words=();

for ($id=0; $id<=@language.length; $id++)
{

        my $eng = $db->selectall_arrayref("select word from words 
                                                    left outer join language
                                                    on words.languageId = language.languageId
                                                    where words.languageId = $id
                                                    ;");


        foreach $eng(@$eng)
        {   
        my($word) = @$eng;
        $ref_to_Array->[$id][$word] = @words($id,$word);

            }
                return $words($id, $word);
}

$wordsList= NextWords();
print $wordsList;

它返回非.. 是因为我想返回2D数组。

更新

我仍然感到困惑,因为当我执行查询时,它会给我一个单词列表,例如:

select word from words where language_id = 1 
(1=english, 2 - chinese, 3 - french) 

我正在使用for循环遍历语言,并从数据库中获取所有单词。

问题是我想要循环并希望该数组自动添加到2D数组中。

1个回答

34

在你编写的每个程序的顶部放置 use warnings; use strict;。这两个语句将为您捕捉许多错误。

你不能使用 (...) 后缀访问数组。该构造用于调用函数 mysub(...)$mysubref->(...)。要访问数组元素,您需要使用后缀 [ index ]。在Perl中,多维数组对于每个级别都需要一对 [...]。这是因为二维数组只是一个每个元素也是数组的数组。

my @array = ([1, 2, 3], [4, 5, 6], [7, 8, 9]);

my $top_left     = $array[0][0];  # 1
my $bottom_right = $array[2][2];  # 9

print "@$_\n" for @array;
1 2 3
4 5 6
7 8 9

要了解Perl的数据结构和其他内容,请访问perldoc.perl.org。这里有一些直接链接:

最后,@language.length并不是你想象中的那样。它将@language作为标量上下文,得到它的长度作为一个数字,然后将其与length($_)连接起来。结果表达式类似于(scalar @language) . length($_)。由于<=运算符对其参数施加标量上下文,因此您可以简单地编写$id <= @language。但是,Perl为您提供了一种更自然的编写此类型循环的方式:

for my $id (0 .. @language) {...}

或者

对于我的 $id (0 .. $#language) {...}
如果你真的是想要 $id < @language ,因为 $language[scalar @language] 是数组末尾后面一个元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接