将数组传递给Perl sub时“参数太多”?

时间:2012-08-13 06:52:11

标签: perl

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

2 个答案:

答案 0 :(得分:62)

你的问题就在这里:

sub create_hash()
{

()prototype。在这种情况下,它表示create_hash不带参数。当你试图传递一些时,Perl抱怨道。

应该看起来像

sub create_hash
{

一般来说,you should not use prototypes with Perl functions。它们不像大多数其他语言的原型。它们确实有用,但这在Perl中是一个相当高级的主题。

答案 1 :(得分:-3)

可以使用数组引用:

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

create_hash(\@files2);