"Слишком много аргументов" при передаче массива в Perl sub?
У меня есть функция ниже в perl
sub create_hash()
{
my @files = @_;
foreach(@files){
if(/.text/)
{
open($files_list{$_},">>$_") || die("This file will not open!");
}
}
}
Я вызываю эту функцию, передавая аргумент массива, как показано ниже:
create_hash( @files2);
В массиве содержится около 38 значений.
Но я получаю ошибки компиляции:
Too many arguments for main::create_hash at ....
что я здесь делаю?
моя версия perl:
This is perl, v5.8.4 built for i86pc-solaris-64int
(with 36 registered patches, see perl -V for more detail)
Ответы
Ответ 1
Ваша проблема здесь:
sub create_hash()
{
()
является prototype. В этом случае это означает, что create_hash
не принимает никаких параметров. Когда вы пытаетесь передать его, Perl жалуется.
Он должен выглядеть как
sub create_hash
{
В общем случае вам не следует использовать прототипы с функциями Perl. Они не похожи на прототипы на большинстве других языков. У них есть использование, но это довольно продвинутая тема в Perl.
Ответ 2
Может использовать ссылку на массив как:
sub create_hash {
my ($files) = @_;
foreach(@{$files)){
...
}
}
create_hash(\@files2);