It means that $file will become the argument
(from either the program, or the current sub routine),
and if there isn't an argument, $file
becomes foo.html. One could say that
foo.html is the default.
The "and file opening" is a red herring in your title.
There's no relationship between the use of shift() and
the use of open().