1

我是 Perl 新手,想将两个数组相乘:

my @array1 = (1,2,3);
my @array2 = (2,4,6);

并打印出来:

      # output ==
      #          2  4  6
      #          4  8 12
      #          6 12 18

编辑:

知道了

my @array1 = (1,2,3);
my @array2 = (2,4,6);

multiply_array(\@array1, \@array2);

sub multiply_array{
     my ($a1, $a2)=@_;
     for(my $i=0; $i<3; $i++){
         for(my $j=0; $j<3; $j++){
             my $x = @$a1[$i]*@$a2[$j];
             print $x."\t";
        }
         print "\n";
    }
}
4

2 回答 2

5

您尝试对数组执行的操作称为笛卡尔积。

使用笛卡尔积创建数组数组:

my @product = map { my $a = $_; [map { $_ * $a } @array2] } @array1;

以非常详细的格式打印它:

use Data::Dumper;
Dumper(@product);

只需打印产品而不将其存储到数组中:

for my $x (@array1) {
    for my $y (@array2) {
        print $x * $y . "\t";
    }
    print "\n";
}
于 2013-02-25T22:06:05.303 回答
0

您已将数组的引用传递给函数。

因此,您需要使用->来访问数组元素。

以下是您可以执行的操作:

use strict;
use warnings;

my @array1 = (1,2,3);
my @array2 = (2,4,6);

multiply_array(\@array1, \@array2);

sub multiply_array{
    my ($a1, $a2)=@_;
    for(my $i=0; $i<3; $i++){
        for(my $j=0; $j<3; $j++){
            my $x = $a1->[$i]*$a2->[$j];
            print $x."\t";
        }
        print "\n";
    }
}
于 2013-02-26T06:32:26.580 回答