##
# do all the assignments from ARGV here
my $filename = shift @ARGV or die "A filename parameter is required";
# explicitly open for read; and make sure filename is in the error message for reference
open FILE, '<', $filename or die "Cannot open file '$filename': $!\n";
while(){
...
}
close FILE;
## ##
use Data::Dumper;
die Dumper \@ARGV; # see what's really in there ...