【发布时间】:2013-06-12 13:33:07
【问题描述】:
使用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
【问题讨论】:
-
一些风格说明:你正在用原型声明 get_grandtotal;这几乎没有用,可能会造成混淆,所以不要。不过,请务必将 @values 传递给 get_grandtotal 并遍历 @_。
-
简单地说,
$sum = sum map @$_, @values
标签: perl multidimensional-array subroutine