2013-10-03 30 views
0

我需要你的幫助。Perl Getopt ::長模塊數值

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.如何解決呢?

回答

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文檔);錯誤的價值意味着在閱讀論證時出現錯誤。

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'"; 
} 
+0

權。我不認爲這一點。謝謝。它爲我工作。只是出於好奇,如果我需要這個數值並從0開始,我會做什麼?它並不重要,只是爲了學習。 – AndreiMotinga

-1

在GetOptions方法,它以參數=我的號碼,如果你想讓它爲數字,你應該使用功能 使用標量::的Util QW(looks_like_number)

+0

looks_like_number不會使某個值成爲數字;它會告訴你Perl是否能夠將它解釋爲一個數字。 –