[英]How do I create a 2D array in Perl?
我试图在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数组。
更新
我仍然感到困惑,因为当我执行查询时,它给了我一个单词列表,如:
select word from words where language_id = 1
(1=english, 2 - chinese, 3 - french)
我正在使用for循环语言,以便从数据库中获取所有单词
问题是我想循环并希望数组自动添加到2d数组。
放置use warnings; use strict;
use warnings; use strict;
在你编写的每个程序的顶部。 这两个pragma将为你捕获许多错误。
您无法访问带有(...)
后缀的数组。 该构造用于调用函数mysub(...)
或$mysubref->(...)
。 要访问数组元素,请使用后缀[ index ]
。 在Perl中,多维数组需要每个级别一对[...]
。 这是因为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
您可以在perldoc.perl.org上了解有关Perl数据结构和Perl其余部分的更多信息 。 以下是一些直接链接:
最后, @language.length
没有按照你的想法做到。 它在标量上下文中使用@language
,它的长度为数字,然后将其与length($_)
连接起来。 结果表达式就像(scalar @language) . length($_)
(scalar @language) . length($_)
。 由于<=
运算符在其参数上强制使用标量上下文,因此您只需编写$id <= @language
。 但是,Perl为您提供了一种更自然的方式来编写这种类型的循环:
for my $id (0 .. @language) {...}
要么
for my $id (0 .. $#language) {...}如果你的意思是
$id < @language
因为$language[scalar @language]
是一个超出数组末尾的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.