在perl中创建数组数组

时间:2013-07-16 10:20:11

标签: perl multidimensional-array

如何在perl中创建数组数组,并使用适当的索引访问每个成员数组。

目前我正在使用一维数组,在每次迭代时更新并打印:

for ($i=0;$i<$size;$i++)
{
  @words = @synsets[$i]->words;
  print "@words\n"
}

但是因为在下一步我想要执行进一步的操作,我想访问与每个“synset”对应的数组。 有人可以告诉我我该怎么做吗?

3 个答案:

答案 0 :(得分:1)

尝试:

for my $synset ( @synsets ){
    my @words = @$synset;
    print "@words\n";
}

答案 1 :(得分:1)

这是一个用于演示基础知识的小型自包含文件。编辑以适应:-)

Data::Dumper有助于可视化数据结构 - 一个很好的学习工具。

[]充当"anonymous array constructor"。您可以使用perldoc perlref了解更多相关信息(或按照上一个链接)。有时你必须先向别人解释一些事情,然后你才能确定自己明白了,所以请耐心等待;-)

use 5.10.0 ;
use Data::Dump;
use strict;
use warnings;

my @AoA ;

#my $file = "testdata.txt";
#open my ($fh), "<", "$file" or die "$!";
#while  (<$fh>) {
while  (<DATA>) {
  my @line = split ; 
  push @AoA, [@line] ;
}

say for @AoA;   # shows array references
say @{$AoA[0]}[0] ;  # dereference an inner element
foreach my $i (0..$#AoA)
{
 say "@{$AoA[$i]}[2..4]" ; # prints columns 3-5 
} 

dd (@AoA) ;   # dump the data structure we created ... just to look at it.

__DATA__
1 2 3 0 8 8
4 5 6 0 7 8
7 8 9 0 6 7

答案 2 :(得分:0)

您需要列出对列表的引用,因为Perl不允许列表中的列表。

@sentences = ();
...
    # in the loop:
    push @sentences, \@words;

要访问单个单词,您可以执行以下操作:

$word = $sentences[0]->[0];

但在这种情况下可以省略箭头。