I have a function below in perl
sub create_hash() { my @files = @_; foreach(@files){ if(/.text/) { open($files_list{$_},">>$_") || die("This file will not open!"); } } }
I am calling this function by passing an array argument like below:
create_hash( @files2);
The array has got around 38 values in it. But i am getting compilation errors:
Too many arguments for main::create_hash at ....
what is the wrong that i am doing here?
my perl version is :
This is perl, v5.8.4 built for i86pc-solaris-64int (with 36 registered patches, see perl -V for more detail)
Passing Arguments to a Subroutine You can pass various arguments to a subroutine like you do in any other programming language and they can be acessed inside the function using the special array @_. Thus the first argument to the function is in $_[0], the second is in $_[1], and so on.
Using the Parameter Array (@_) Perl lets you pass any number of parameters to a function. The function decides which parameters to use and in what order.
Perl always passes by reference. It's just that sometimes the caller passes temporary scalars. Perl passes by reference.
Your problem is right here:
sub create_hash() {
The ()
is a prototype. In this case, it indicates that create_hash
takes no parameters. When you try to pass it some, Perl complains.
It should look like
sub create_hash {
In general, you should not use prototypes with Perl functions. They aren't like prototypes in most other languages. They do have uses, but that's a fairly advanced topic in Perl.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With