26

我在 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)
4

2 回答 2

79

你的问题就在这里:

sub create_hash()
{

()是一个原型。在这种情况下,它表示不create_hash带任何参数。当你试图通过它时,Perl 会抱怨。

它应该看起来像

sub create_hash
{

通常,您不应该将原型与 Perl 函数一起使用。它们不像大多数其他语言中的原型。它们确实有用途,但这是 Perl 中相当高级的主题。

于 2012-08-13T06:58:01.397 回答
-3

可以将数组引用用作:

sub create_hash {
    my ($files) = @_;
    foreach(@{$files)){
      ...
    }
}

create_hash(\@files2);
于 2012-08-13T06:58:51.730 回答