如何使用Perl推入数组数组?

时间:2013-01-18 17:06:41

标签: perl

下面是一段Perl代码。我想循环使用不同正则表达式($myo)和不同运算符($op)的几个查询,并将结果保存到数组数组而不是一个大@result数组。

即,MYO[0-9]*$的结果数组将是每个运算符$results[0][0]$results[0][1] ...以及MYO[0-9]*R$$results[1][0]的数组, $results[1][1]

有什么想法吗?

my @tech_ops =  ("AR","DB","GM","LW","MM","SA");
  my @results;

    for my $myo (qw(MYO[0-9]*$ MYO[0-9]*R$ MYO[0-9]*T$ MYO[0-9]*U$)) {
      foreach $op (@tech_ops)
        {
           $sth->execute($myo, $date_stop, $date_start,$op) 
         or die "Couldn't execute query for $myo: " . $sth->errstr;
           push @results, $sth->fetchrow_array;
         }
    }

3 个答案:

答案 0 :(得分:5)

使用fetchall_arrayref方法代替fetchrow_array方法。

所以只需替换这一行:

push @results, $sth->fetchrow_array;

这一行:

push @results, $sth->fetchall_arrayref;

Here is the documentation for all the DBI statement handler methods.

答案 1 :(得分:4)

my @tech_ops =  ("AR","DB","GM","LW","MM","SA");
my @results;

for my $myo (qw(MYO[0-9]*$ MYO[0-9]*R$ MYO[0-9]*T$ MYO[0-9]*U$)) {
    my @myo_results;
    foreach $op (@tech_ops) {
        $sth->execute($myo, $date_stop, $date_start,$op) 
            or die "Couldn't execute query for $myo: " . $sth->errstr;
        push @myo_results, $sth->fetchrow_array;
    }
    push @results, \@myo_results;
}

答案 2 :(得分:0)

您可以使用数组引用:

my $ref;
for my $i (1..10) {
   for my $j (1..10) {
        push @{$ref->[$i]}, $j;
    }
}

那就行了。

编辑:这将创建对10x10矩阵的引用。