2013-11-21 2 views
2

다른 펄 스크립트 (sample.pl)에서 8 개의 매개 변수를 갖는 서브 루틴을 내 perl 스크립트 (sample1.pl)에서 호출하려고합니다. 이 오류가 발생합니다. 오류는 어떻게다른 펄 스크립트에서 8 개의 매개 변수를 가진 서브 루틴을 호출하는 방법

sample1.pl에게

require 'sample.pl'; 
use strict; 
use warnings; 
my $sa = main_prgm(); 
sub main_prgm { 
    eval(callng_prgm(10,12,15,14,16,12,12,12)); 
} 

sample.pl을 수행하는 날을 제안 해주십시오 수

"sum of 8 numbers is 0Illegal character in prototype for main::callng_prgm : $a,$b,$c,$d,$e,$f,$g,$h at D:/workspace/sdff/sample.pl line 4. 
Use of uninitialized value $b in addition (+) at D:/workspace/sdff/sample.pl line 6. 
Use of uninitialized value $a in addition (+) at D:/workspace/sdff/sample.pl line 6. 
Use of uninitialized value $c in addition (+) at D:/workspace/sdff/sample.pl line 6. 
Use of uninitialized value $d in addition (+) at D:/workspace/sdff/sample.pl line 6. 
Use of uninitialized value $e in addition (+) at D:/workspace/sdff/sample.pl line 6. 
Use of uninitialized value $f in addition (+) at D:/workspace/sdff/sample.pl line 6. 
Use of uninitialized value $g in addition (+) at D:/workspace/sdff/sample.pl line 6. 
Use of uninitialized value $h in addition (+) at D:/workspace/sdff/sample.pl line 6. 
" 

로 표시됩니다

use strict; 
use warnings; 
our ($a,$b,$c,$d,$e,$f,$g,$h); 
sub callng_prgm ($a, $b, $c, $d, $e, $f, $g, $h) { 
    my $z = ($a+$b+$c+$d+$e+$f+$g+$h); 
    print "sum of 8 numbers is $z"; 
} 
1; 
+3

Perl의 프로토 타입은 필요하지 않으며 다른 언어와 같은 방식으로 작동하지 않으므로 수행하는 작업을 모르는 경우 사용하지 마십시오. 프로토 타입은 하위 이름 뒤에 괄호 안에 들어있는 내용입니다. 하위 선언은 다음과 같아야합니다 :'sub NAME {CODE}'(괄호 없음) – TLP

+1

perl5에서 구현되지 않은 이름 지정된 인수를 사용하려고 시도합니다. 다른 방식으로 이것을 수행 할 수 있습니다. http://perldesignpatterns.com/?NamedArguments – teodozjan

답변

1

다음과 같이 서브를 정의하십시오 :

sub callng_prgm 
{ 
    my ($a,$b,$c,$d,$e,$f,$g,$h) = @_ 
    my $z= ($a+$b+$c+$d+$e+$f+$g+$h); 
    print "sum of 8 numbers is $z"; 
} 
+0

예, 그 코드를 사용하고 있지만 답변을 제공하지만 "main : callng_prgm : $ a, $ b, $ c, $ d, $ e, $ f, $ g, $ h에 대한 프로토 타입에 잘못된 문자가 있습니다. D : /workspace/sdff/sample.pl line 4. ", 해당 경고를 해결하는 방법 .. –

+2

@santoshikumari 아니요, 해당 코드를 사용하고 있지 않거나 경고를받지 못합니다. M42가 더 신중하게 게시 한 코드는 매우 불가능합니다. – TLP

+0

감사합니다 ... 그 작업 –

1

왜 자신을 8 개의 매개 변수로 제한합니까? 이것은 어떤 수의 매개 변수와도 작동합니다.

#!/usr/bin/perl 

use strict; 
use warnings; 
sub callng_prgm 
{ 
    my $z; 
    foreach (@_) {$z += $_}; 
    print $z; 
} 
callng_prgm(10,12,15,14,16,12,12,12); 
관련 문제