#!/usr/bin/perl use strict; use warnings; {package Matrix; use overload '+' => \&plus, '""' => \± sub new{ my $class = shift; bless {}, $class; } sub fl{ my $self = shift; my $line = shift; $self->{'mat'}[$line] = [@_]; } sub mat{ return $_[0]->{'mat'}; } sub pm{ for (@{$_[0]->{'mat'}}){ print "@{$_}\n"; } } sub plus{ my $m1 = $_[0]->mat; my $m2 = $_[1]->mat; my @res; for my $i (0..$#{$m1}){ for my $j (0..$#{$m1->[$i]}){ $res[$i][$j] = $m1->[$i][$j]+$m2->[$i][$j]; } } bless {mat => [@res]}, 'Matrix'; } } my $x; $x = Matrix->new(); $x->fl(0,1,2,3); $x->fl(1,6,5,4); $x->fl(2,2,2,2); my $y; $y = Matrix->new(); $y->fl(0,6,7,8); $y->fl(1,4,4,4); $y->fl(2,1,1,1); my $z = $x + $y; print $x,"+\n",$y,"=\n",$z;