2011-02-17 6 views
9

Je suis en train de créer un tableau 2d en PerlComment créer un tableau 2D en Perl?

mon code:

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

for ($id=0; $id<[email protected]; $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; 

retourne non .. parce que je veux retourner le tableau 2d.

Mise à jour

Je suis encore confus parce que quand j'exécute la requête, il me donne une liste de mots comme:

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

J'utilise la boucle à travers la langue et pour pour obtenir tous les mots de la base de données

Le problème est que je veux effectuer une boucle et que le tableau est automatiquement ajouté au tableau 2d.

Répondre

25

Placez use warnings; use strict; en haut de chaque programme que vous écrivez. Ces deux pragmas vont attraper beaucoup d'erreurs pour vous.

Vous ne pouvez pas accéder à un tableau avec un suffixe (...). Cette construction est utilisée pour appeler les fonctions mysub(...) ou $mysubref->(...). Pour accéder aux éléments de tableau, vous utilisez un postfix [ index ]. Et en Perl, les tableaux multidimensionnels nécessitent une paire de [...] pour chaque niveau. C'est parce qu'un tableau 2D est simplement un tableau où chaque élément est aussi un tableau.

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 

Vous pouvez en savoir plus sur les structures de données de Perl et le reste de Perl à perldoc.perl.org. Voici quelques liens directs:

Enfin, @language.length ne fait pas ce que vous pensez. Il prend @language dans un contexte scalaire, qui est sa longueur en tant que nombre, puis en le concaténant avec length($_). L'expression résultante est quelque chose comme (scalar @language) . length($_). Puisque l'opérateur <= impose un contexte scalaire sur ses arguments, vous pouvez simplement écrire $id <= @language. Cependant, Perl vous fournit une façon plus naturelle d'écrire ce type de boucle:

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

ou

 
for my $id (0 .. $#language) {...} 
si vous avez vraiment voulu dire $id < @language depuis $language[scalar @language] est un élément après la fin du tableau.

+1

Je comprends le concept sur le tableau 2d .. – JoT