0

我需要你的帮助。

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);

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

4

3 回答 3

5

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

读取值后,如果要确保它是数字,可以使用Scalar::Util'slooks_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);

另外,不要忘记检查 GetOptions 的返回码(根据 Getopt:::Long 文档);错误值意味着读取参数时出现错误。

于 2013-10-03T23:02:42.247 回答
1

=s如果要保留输入值,请使用。您可以稍后检查该值的有效性,例如

use Scalar::Util qw(looks_like_number);
$result = GetOptions(...);
if (defined $input_mm) {
     looks_like_number($input_mm) or die "Invalid mm value '$input_mm'";
}
于 2013-10-03T22:58:12.013 回答
-1

在 GetOptions 方法中,它把参数 =i 作为一个数字,如果你想把它作为数字,你应该使用函数 use Scalar::Util qw(looks_like_number)

于 2013-10-04T05:37:04.530 回答