Sigue el código e la función matrixProd:
lhp@europa:~/projects/perl/src/perltesting$ sed -ne '1,26p' matrixproduct.pl | cat -n
1 #!/usr/bin/perl -w
2 use strict;
3 use List::Util qw(sum);
4 use List::MoreUtils qw(any);
5 use Scalar::Util qw{reftype};
6
7 sub matrixProd {
8 my ($A, $B) = @_;
9 die "Error. Se esperaban dos matrices" if any { !defined($_) or reftype($_) ne 'ARRAY' } ($A, $B, @$A, @$B);
10
11 my $nrA = @$A;
12 my $nrB = @$B;
13 my $ncB = @{$B->[0]};
14 my @C;
15
16 die ("Las matrices no son multiplicables\n") if any { @$_ != $nrB } @$A;
17
18 for(my $i = 0; $i < $nrA; $i++) {
19 for(my $j = 0; $j < $ncB; $j++) {
20 my $k = 0;
21 $C[$i][$j] = sum(map { $A->[$i][$k++] * $_ } map { $_->[$k] } @$B);
22 }
23 }
24
25 return \@C;
26 }
Casiano Rodríguez León
