use*_*478 0 arrays parameters perl reference
我发送了一系列参考文献,这是我的子程序:
sub multiply
{
my @product;
my $ref1 = $_[0];
my $ref2 = $_[1];
my @array1 = @$ref1;
my @array2 = @$ref2;
}
my ($rowsA,$columnsA) = &dimensions(@$ref1);
my ($rowsB,$columnsB) = &dimensions(@$ref2);
for $i (0..$rowsA-1){
for $j (0..$columnsB-1){
for $k (0..$columnsA-1){
$product[$i][$j] += $array1[$i][$k] * $array2[$k][$j];
}
}
}
Run Code Online (Sandbox Code Playgroud)
此子例程适用于两个参数,但如何在发送两个以上参数时将矩阵相乘?
您想@_直接使用该数组.您将无法像在您的示例b/c中那样直接分配您的引用,因为您找到了,您不知道传递的项目数.好的是,你也不需要.所有参数都通过特殊的@_数组传递给Perl子例程.当您看到my $x = shift;此数组是数据从本地变量转移到的位置.在这里,由于您无法提前知道要创建多少个变量,因此可以直接使用该数组.典型的阵列功能适用.(即获得大小,你可以使用标量(@_))
以下示例显示了使用常规标量编写的子例程的类型.它对于引用来说是相同的,你只需要在它们使用之前取消引用它们.
#!/usr/bin/perl
my $result = multiply(2,4,5);
print "Result 1: $result\n";
$result = multiply(2,2);
print "Result 2: $result\n";
$result = multiply(2,2,3,5,6);
print "Result 3: $result\n";
sub multiply
{
my $ans = 1;
foreach my $x (@_) { $ans *= $x; }
return $ans;
}
Run Code Online (Sandbox Code Playgroud)