2017-06-21 64 views
-1

我在用的GetOptions從perl的使用未初始化的變量警告

GetOptions(
     'lines=s'=>\$globallines, 
     ); 

這裏得到的值,lines是一個可選參數。當用戶沒有輸入值時,我得到一個use of uninitialized variable警告,我在if語句中使用lines變量。我無法解決此警告。你能幫助他嗎?

對不起,如果這是一個愚蠢的問題,我是新來的Perl。

if($globallines>0){#<SOME CODEEE> 

回答

1

發生了什麼 - 如果沒有提供參數,值是未定義的。 (不爲零)。

因此,比較它的數字給出了一個錯誤。

有幾個可能的解決方案,但最簡單的是:

if ($globallines and $globallines > 0) { 

或者僅僅是初始化它,如果未定義:

$globallines //= 0; #sets it to zero if undef. 
+0

我可以使用<$ globallines // =「name」;>作爲字符串值嗎? – emma

+0

呃。是。我認爲。但是它不是用於代碼引用的'',而是反引號。但是perl不在乎。你可以使用'$ globallines // =「在這裏指定一個名字」;'和數字值一樣。但是如果你這樣做,你的'> 0'測試將會出錯。 (除非字符串是「0.0」或其他數字可轉換爲零) – Sobrique

1

如果-lines的選擇是......呃......可選(!),當這個選項被省略時,你想要什麼行爲?選擇一個默認值並在調用GetOptions()之前指定該值。

my $globallines = 0; # Or whatever value is appropriate 

GetOptions(
    'lines=s' => \$globallines, 
); 

而且,難道你不想lines=i而非lines=s?這將確保你只能得到一個整數。