sub mmMxN { my $self = shift; die "Incompatible matrix dimensions" unless @{ $self->{M} } == @{ $self->{N}->[0] }; $self->{R} = map[ (0) x @{ $self->{M} } ], 0 .. $#{ $self->{N}->[ 0 ] }; for my $i ( 0 .. $#{ $self->{M} } ) { for my $j ( 0 .. $#{ $self->{N}->[0] } ) { $self->{R}->[$i]->[$j] += $self->{M}->[$i]->[$_] * $self->{N}->[$_]->[$j] for 0 .. $#{ $self->{N} }; } } return $self->{R}; }