Perl Getopt ::长模块数值

And*_*nga 0 perl

我需要你的帮助.

use Getopt::Long;
my $inputFile = "";
my $outputFile = "";
my $input_mm = ""; 
my $result;

$result = GetOptions (
                "fromFile=s" => \$inputFile,      # string
               "toFile=s"    =>  \$outputFile,
               "mm=i"     =>  \$input_mm);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果在命令行中我给$ input_mm 07的值 - perl将其视为7.如何修复它?

Rob*_*t P 5

=i将读取值作为数字.如果要保留格式,请使用=s.

你读的值之后,如果你想确保它的数字,你可以使用Scalar::Utillooks_like_number子程序:

use Scalar::Util qw/looks_like_number/;

# ...

$result = GetOptions (
           "fromFile=s" => \$inputFile,      # string
           "toFile=s"    =>  \$outputFile,
           "mm=s"     =>  \$input_mm)
     or die("Error in command line arguments\n");

die "mm wasn't a number!" 
    unless defined $input_mm && looks_like_number($input_mm);
Run Code Online (Sandbox Code Playgroud)

另外,不要忘记检查GetOptions的返回码(根据Getopt ::: Long docs); false值表示读取参数时出错.