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()
{

試作品()です。この場合、がパラメーターをとらないことを示します。いくつか渡そうとすると、Perl は文句を言います。create_hash

次のように見えるはずです

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 に答える