I have run into this same problem a few times so I am documenting it here. When using GetOpt::Long and friends I would be mystified when the options were ignored. For example:
#!/usr/bin/perl use strict; use warnings; use Getopt::Long; my $debug = 0; my $result = GetOptions( "debug" => $debug ); print "Debug flag is $debug\\n";
wriley ~/bin> ./getopttest.pl Debug flag is 0 wriley ~/bin> ./getopttest.pl --debug Debug flag is 0 wriley ~/bin>
The options are completely ignored! A short time of googling later and I remembered the solution.
#!/usr/bin/perl use strict; use warnings; use Getopt::Long; my $debug = 0; my $result = GetOptions( "debug" => \\$debug ); print "Debug flag is $debug\\n";
wriley ~/bin> ./getopttest.pl Debug flag is 0 wriley ~/bin> ./getopttest.pl --debug Debug flag is 1 wriley ~/bin>
The key is escaping the $ in the GetOptions() statement. If you don’t escapey, it don’t workey!