13

Perlで2D配列を作成しようとしています

私のコード:

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配列を返したいので、non..を返します。

アップデート

クエリを実行すると、次のような単語のリストが表示されるため、まだ混乱しています。

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

私は言語を介してforループを使用しており、データベースからすべての単語を取得するために使用しています

問題は、ループして、配列を2D配列に自動的に追加したいということです。

4

1 に答える 1

33

use warnings; use strict;あなたが書くすべてのプログラムの一番上に置きます。これらの2つのプラグマは、多くのエラーを検出します。

接尾辞を使用して配列にアクセスすることはできません(...)。その構造は、関数mysub(...)またはを呼び出すために使用されます$mysubref->(...)。配列要素にアクセスするには、接尾辞を使用します[ index ]。また、Perlでは、多次元配列には[...]レベルごとに1つのペアが必要です。これは、2D配列が単なる配列であり、各要素も配列であるためです。

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のデータ構造とその他のPerlについて詳しくは、perldoc.perl.orgをご覧ください。ここにいくつかの直接リンクがあります:

最後に、@language.lengthあなたが思っていることをしません。これは、数値としての長さであるスカラーコンテキストを取り込ん@languageでから、それを。と連結しlength($_)ます。結果の式はのようなもの(scalar @language) . length($_)です。<=演算子は引数にスカラーコンテキストを課すため、単純にと書くことができます$id <= @language。ただし、Perlは、このタイプのループを作成するためのより自然な方法を提供します。

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

また

私の$id(0 .. $#language){...}
あなたが本当に意味しているのなら、それは配列の終わりを過ぎた1つの要素だ$id < @languageからです。$language[scalar @language]

于 2011-02-17T02:09:57.857 に答える