This is a fairly common encounter for newer Perl programmers. As the previous reply points out, you can get around the scoping issues by using the vars pragma (or the our declaration in place of my).
My suggestion is to avoid individual variables for the options completely. I never use the implicitly-sets-variable form of Getopts::Std or Getopts::Long. Instead, I always declare a hash table for the options (generally under a creative name like "%opts") and pass it by reference as the second parameter to the getopts call:
getopts("J:f:s:", \%opts) or die "error message...";
This has several advantages: You still have a lexical variable, you're passing in an explicit reference to it which avoids the scoping problems; You can also add more options to your command-line logic without worrying about declaring new variables, and you can remove options without leaving declared-but-unused variables laying around.
--rjray
In reply to Re: use strict with Getopt::Std
by rjray
in thread use strict with Getopt::Std
by cutter
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |