1

使用Data::Dumper并且List::Util我可以将数组中每一行的总和与一个子程序相加。这部分是正确的。

使用一种更简单的方法,我尝试使用一个名为get_grandtotal. 这会返回不正确的数字。

我的问题是如何打印正确的总计?

以及我将使用什么修改来使用get_row(@values).

#!/usr/bin/perl  
use 5.10.1; 
use warnings; 
use strict; 

use List::Util qw(sum); 
use Data::Dumper;

my @values = ( 
    [ 6, 5, 13 ], 
    [ 35, 9, 6 ], 
    [ 65, 255, 54 ] 
); 

get_row(@values);

sub get_row { 
    my @total;
    foreach my $row (@_) { 
        say join ' ', @$row; 
        push @total, sum @$row;
    }     
    say Data::Dumper->Dump( [ \@total ], [ qw(*Row_Total) ] );
}

my $sum = 0;
sub get_grandtotal() {    
    foreach (@values) {
        $sum += $_;
    }
    print "Grand Total = $sum\n"; 
}

get_grandtotal(); 

输出

6 5 13
35 9 6
65 255 54
@Row_Total = (
               '24',
               '50',
               '374'
             );

Grand Total = 61899232
4

1 回答 1

2

您正在尝试将数组引用添加到

$sum += $_;

将其更改为

$sum += sum @$_;

并且您的代码将起作用。

此子例程用于map从数组中提取列,并打印总计

sub get_column {

    my @total;
    foreach my $i (0 .. $#{$values[0]}) {
        my @column = map $_->[$i], @values;
        say join ' ', @column; 
        push @total, sum @column;
    }     

    say Data::Dumper->Dump( [ \@total], [ qw(*Column_Total) ] );
}

输出

6 35 65
5 9 255
13 6 54
@Column_Total = (
                  '106',
                  '269',
                  '73'
                );
于 2013-06-12T13:40:53.997 回答