Here is the difference, plus another way to write it.
my $conf_file= @_
creates the $conf_file
scalar variable and sets it to the value of @_
in scalar context, which is... 1, hence the
error message when your script tries to open the1
file.
my( $conf_file)= @_;
creates the scalar variable
$conf_file and puts it in a list (as the first and only element
of that list). Then it sets that list with @_, which means
that the first element in that list ($conf_file)
gets the first element of @_. Which works fine
when called with just one element, but maybe not for the reasons you
thought.
You could also have written
my $conf_file= shift;
which declares the scalar variable $conf_file and
removes the first element from @_ and sets $conf_file
with it.
Which leads me to a style question to my fellow monks: do
you usually use
my( $arg1, $arg2)= @_;
or
my $arg1= shift;
my $arg2= shift; ?
The first option is more compact but the second one lets you check for extra (unwanted) arguments if you want.
I usually use the my( $arg1, $arg2)= @_; form, but maybe it's just lazyness...
In reply to Re: using 'my $var' vs. 'my($var)'
by mirod
in thread using 'my $var' vs. 'my($var)'
by decnartne
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |