Getopt::Long doesn't know which options are required. It just knows whether it managed to process the command-line options.

BTW a random hint. I like to do this:
\nGetOptions(\n  "foo=s"   => \\ my $foo,\n  "bar=i"   => \\ my $bar,\n);\n

if I'm not trying to initialize defaults.

If you want a command-line processor that can figure out required arguments, then I'd suggest Getopt::Declare or Getopt::Euclid. (The latter looks more interesting to me.) But note that since I work in a code-base that has established conventions around Getopt::Long, I have not bothered experimenting with those.

Cheers,
Ben