2012-08-31 54 views
1

我正在尝试编写矩阵乘法的脚本。它只是一个基本的程序,但我不能弄明白关于以下错误:错误 - '全局符号需要显式包名'

全局符号“@ ref_mat1”需要明确包名在multiplication.pl线49

全局符号“@ ref_mat2”需要在multiplication.pl行明确包名49

下面是我的脚本:

#!/usr/bin/perl -w 
    use strict; 

    my @mat1=(
     [2,3,4], 
     [1,2,3], 
     [3,4,5] 
      ); 

    my @mat2=(
      [2], 
      [3], 
      [4] 
      ); 


    my ($i, $j, $k); 
    my $r_product=[]; 

    $r_product= mat_multiplication(\@mat1,\@mat2); 

    sub mat_multiplication 
     { 

     my ($ref_mat1,$ref_mat2)[email protected]_; 
     my($mat1_row,$mat1_col)=total_rows_column($ref_mat1); 
     my($mat2_row,$mat2_col)=total_rows_column($ref_mat2); 
      for($i=0;$i<$mat1_row;$i++) 
      { 
       for($j=0;$j<$mat2_col;$j++) 
       { 
        my $sum=0; 
        for($k=0;$k<$mat1_col;$k++) 
        { 
         $sum=$sum+$ref_mat1[$i][$k]*$ref_mat2[$k][$j]; 
        } 
        $r_product->[$1][$j]=$sum; 
       } 
      } 
      return $r_product; 

     } 


    sub total_rows_column 
      { 
       my($r_mat) [email protected]_; 
       my [email protected]{$r_mat}; 
       my [email protected]{$r_mat->[0]}; 
       return($num_row,$num_col); 
      } 

我搜索了这个问题,并发现了一个链接

Explanation of 'global symbol requires explicit package name'

但仍然无法解决它。请让我看看,让我知道我在哪里犯错误。

感谢

+0

很抱歉,但我不知道如何接受的问题。那是真的不是我的原因 – Maverick

回答

7

$ref_mat1$ref_mat2是数组引用。在Perl中,如果你想访问一个数组的引用,你不能直接使用$reference[$idx]--你必须在$ref_mat1->[0]之类的引用之后使用->运算符。

没有它Perl觉得$ref_mat1[0]指的是一个不存在的数组@ref_mat1。是的,无论是$var@var可以在同一时间不同的内容存在,看这个例子:

use strict; 
use Data::Dumper; 

my $abc = 42; 
my @abc = (1, 2, 3); 

print Dumper($abc), Dumper(\@abc); 
+0

感谢莫里茨:) – Maverick

相关问题