Как вызвать подпрограмму с 8 параметрами в другом Perl-скрипте

Я пытаюсь вызвать подпрограмму с 8 параметрами в другом скрипте perl (sample.pl) из моего скрипта perl (sample1.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.
"

не могли бы вы предложить мне, как это сделать

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

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;

person santoshi kumari    schedule 21.11.2013    source источник
comment
Прототипы в Perl не требуются и работают не так, как в других языках, поэтому не используйте их, если не знаете, что они делают. (Прототипы — это то, что содержится в скобках после субимени). Вложенное объявление должно выглядеть так: sub NAME { CODE } (без скобок)   -  person TLP    schedule 21.11.2013
comment
Вы пытаетесь использовать именованные аргументы, которые не реализованы в perl5. Этого можно добиться другим способом perldesignpatterns.com/?NamedArguments   -  person teodozjan    schedule 21.11.2013


Ответы (2)


Просто определите свой сабвуфер, например:

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";
}
person Toto    schedule 21.11.2013
comment
да, я использую этот код, он дает ответ, но имеет одно предупреждение как недопустимый символ в прототипе для main::callng_prgm : $a,$b,$c,$d,$e,$f,$g,$h в D: /workspace/sdff/sample.pl строка 4., как устранить это предупреждение.. - person santoshi kumari; 21.11.2013
comment
@santoshikumari Нет, вы не используете этот код, иначе вы не получили бы это предупреждение. Это совершенно невозможно, так что читайте внимательнее код, который выложил M42. - person TLP; 21.11.2013

Зачем ограничивать себя 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);
person Mark Setchell    schedule 21.11.2013