You are evaluating @_ in a scalar context! When you say
my $conf_file = @_;
you are putting the number of elements stored in the @_ list (i.e. "1") into the variable $conf_file. When you
say
my ($conf_file) = @_;
you are evaluating @_ in an array context because what is on the LHS of the assignment is an array. So the element in @_ is copied over to $conf_file.
You could say something like:
my $conf_file = shift;
to shift an element off of @_ into $conf_file if you don't
like the parens!
-- jeff