0

我输入了以下代码:

my @resultsArray;
my @dataArray;
while (my ($id, $originLat, $originLng, $compensation ) = $sth->fetchrow_array) {
    @dataArray = ($id, $originLat, $originLng, $compensation);
    print "ID: $id Lat: $originLat Lng: $originLng Compensation: $compensation\n";
    print "Data Array: @dataArray\n";
    #the above code words.
    #I declare 
    push (@resultsArray, @dataArray);
}

my (@r1, @r2, @r3, @r4);
#issue here
for  (@resultsArray) {
    @r1 = pop(@resultsArray);
    @r2 = pop(@resultsArray);
    @r3 = pop(@resultsArray);
    @r4 = pop(@resultsArray);               

    print "ID: $r4[0] Lat: $r3[0] Lng: $r2[0] Compensation: $r1[0]\n";
    #@r1 = ();
}

上面的代码有效。数组@dataArray被压入@resultsArray堆栈并@r1, @r2, @r3, @r4分别弹出。然而,这是一个糟糕的代码。有没有更好的方法,一种更简洁的方法,行数更少,仍然可读并且通常更专业?

我正在寻求提高我的技能。我觉得如果我带着这样的东西出现,我可能会成为一个房间的笑柄。

4

1 回答 1

2

你只需要学习如何使用引用。这是用数组引用重写的代码:

my @resultsArray;
while (my ($id, $originLat, $originLng, $compensation ) = $sth->fetchrow_array) {
    my $dataArray = [$id, $originLat, $originLng, $compensation];
    print "ID: $id Lat: $originLat Lng: $originLng Compensation: $compensation\n";
    print "Data Array: @$dataArray\n";
    #the above code words.
    #I declare 
    push @resultsArray, $dataArray;
}

for my $r (@resultsArray) {
    print "ID: $r->[0] Lat: $r->[1] Lng: $r->[2] Compensation: $r->[3]\n";
}

Perl 中的数组数组最好表示为数组引用数组

这里的魔力是

my $dataArray = [$id, $originLat, $originLng, $compensation];

这将创建一个包含四个值的匿名数组,然后将标量 $dataArray设置为指向匿名数组。然后这个引用被推送到@resultsArray. @resultsArray现在是一个标量数组,恰好是对其他数组的引用。可以使用构造取消引用->[n]这些引用以获取数组的各个成员。

于 2013-02-07T02:57:31.950 回答