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

また、GetOptions の戻りコードを確認することを忘れないでください (Getopt:::Long ドキュメントに従って)。false 値は、引数の読み取り中にエラーがあったことを意味します。

于 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 に答える