in reply to using 'my $var' vs. 'my($var)'

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...

Replies are listed 'Best First'.
RE: Re: using 'my $var' vs. 'my($var)'
by extremely (Priest) on Oct 27, 2000 at 03:42 UTC
    I use both. Depends on what I want. =) I tend to use the more compact form unless as you mentioned I'm going to provide alternates. One reason for using shift is if I'm going to do the elder-god level evil stunt of &subname and want to pass on all the other args to a second sub (that I choose based on the first arg).

    In these modern, enlightened times, no one believes in that sort of nightmare anymore, we have gentler, happier gods... and references... and we read the rest of the camel book...

    sub eek { my ($selection)=@_; $gsubhash{$selection}->(@_[1..$#_]); }

    Of course, as I get older that seems like too much work. Now I just write one big linear script... =)

    UPDATE Grr... thanks merlyn! As I recall, that is the mistake I had to fix a couple years ago when I actually used that idiom =)

    --
    $you = new YOU;
    honk() if $you->love(perl)