Comment puis-je créer un tableau 2D en Perl?
Je suis en train de créer un tableau 2d en Perl
mon code:
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;
elle renvoie 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)
Je suis à l'aide de la boucle for par le biais de la langue, et pour obtenir tous les mots de la base de données
Le problème c'est que je veux en boucle et vous souhaitez que le tableau est ajouté au tableau 2d automatiquement.
OriginalL'auteur JoT | 2011-02-17
Vous devez vous connecter pour publier un commentaire.
Place
use warnings; use strict;
en haut de chaque programme que vous écrivez. Ces deux pragmas va attraper beaucoup d'erreurs pour vous.Vous ne pouvez pas accéder à un tableau avec une
(...)
postfix. Cette construction est utilisée pour appeler des fonctionsmysub(...)
ou$mysubref->(...)
. Pour accéder aux éléments du tableau, vous utilisez un postfix[ index ]
. Et en Perl, multi-dimensions des tableaux nécessitent une paire de[...]
pour chaque niveau. C'est parce que d'un tableau 2D est tout simplement un tableau dont chaque élément est aussi un tableau.Vous pouvez en apprendre plus sur Perl structures de données et le reste de Perl à perldoc.perl.org. Voici quelques liens directs:
Enfin,
@language.length
ne fait pas ce que vous pensez que cela fonctionne. C'est en prenant@language
dans un contexte scalaire, qui est sa longueur, comme un certain nombre, puis enchaînantlength($_)
. L'expression obtenue est quelque chose comme(scalar @language) . length($_)
. Depuis le<=
opérateur impose un contexte scalaire sur ses arguments, vous pouvez simplement écrire$id <= @language
. Cependant, Perl vous offre un moyen plus naturel d'écrire ce type de boucle:ou
si vous voulait vraiment dire
$id < @language
depuis$language[scalar @language]
est un élément-delà de la fin du tableau.OriginalL'auteur Eric Strom