$ ./program.pl
# or if it's in known PATH:
$ program.pl
####
$ cat foo.pl
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
my %opts;
GetOptions(\%opts, 'foo=s', 'v');
# '=s' modifier means foo needs argument, and it can be
# any string (another modifier is '=i' for integer.)
print "foo = $opts{foo}, verbose = $opts{v}\n";
$ perl foo.pl --foo=bar -v
foo = bar, v = 1
$ ./foo.pl --for=bar -v
foo = bar, v = 1
####
$ cat foo.pl
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
use vars qw($foo, $verbose);
GetOptions('foo=s' => \$foo, 'v' => \$verbose);
# '=s' modifier means foo needs argument, and it can be
# any string (another modifier is '=i' for integer.)
print "foo = $foo, verbose = $verbose\n";
$ perl foo.pl --foo=bar -v
foo = bar, v = 1
$ ./foo.pl --for=bar -v
foo = bar, v = 1