2012-08-31 2 views
1

행렬 곱셈을위한 스크립트를 작성하려고합니다.오류 - '전역 기호는 명시 적 패키지 이름이 필요합니다'

전역 기호 "@의 ref_mat1"는 "ref_mat2 @"multiplication.pl 줄에서 49

전역 기호를 명시 적으로 패키지 이름이 필요합니다 : 그것의 단지 기본 프로그램 그러나 나는 다음과 같은 오류에 대해 그것을 알아낼 수 없습니다입니다 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

관련 문제