# expl6.pl  example  create and call function and procedure  "sub"
use strict;
use warnings;

print "perl  expl6.pl  running\n";

my $a = 1.1;
my $b = 3.3;
my $ab = add($a, $b);
print "a+b using add = $ab \n\n";

my @mat1 = ([1, 2, 3], [4, 5, 6]);
print "mat1= [$mat1[0][0], $mat1[0][1], $mat1[0][2]], \n";
print "      [$mat1[1][0], $mat1[1][1], $mat1[1][2]] \n";
my $nrow1 = @mat1;
my $ncol1 = @{$mat1[0]};
print "nrow1= $nrow1, ncol1= $ncol1 \n";
print " \n";
my @mat2 = ([10, 11, 12], [13, 14, 15]);
print "mat2= [$mat2[0][0], $mat2[0][1], $mat2[0][2]], \n";
print "      [$mat2[1][0], $mat2[1][1], $mat2[1][2]] \n";
print " \n";
my @sum = addmat(\@mat1, \@mat2);
print "sum = [$sum[0][0], $sum[0][1], $sum[0][2]], \n";
print "      [$sum[1][0], $sum[1][1], $sum[1][2]] \n";
print " \n";
print "expl6.pl finished\n";

sub add
{
  my ($arg1, $arg2) = @_; # value parameters
  return $arg1 + $arg2;
} # end add

sub addmat
{
  my ($arg1, $arg2) = @_; # array parameters
  my @a1 = @{$arg1};      # copy, dereferenced
  my @a2 = @{$arg2};
  my $nr = @a1;
  my $nc = @{$a1[0]};
  print "nr= $nr, nc= $nc \n";

  my @suma; # matrix example
  for(my $i=0; $i<$nr; $i++) {
    for(my $j=0; $j<$nc; $j++) {
      $suma[$i][$j] = $a1[$i][$j]+$a2[$i][$j];
    }
  }
  return @suma;
} # end addmat
