2013-06-19 24 views
2
use Getopt::Long::Configure(pass_through); 
# .... 
GetOptions(
     "display=s" => \$display, 
     "input=s", => \$input, # A strange comma right after "input=s", 
); 

有人能爲我解釋一下這段Perl代碼嗎? 第二個選項「輸入= S」,有奇怪的逗號。 這是否逗號有什麼特殊的意義嗎?Perl GetOptions奇怪的逗號中的一個選項

非常感謝你,

+0

它可能無意中得到了一個代碼重構過程中留下的。 – ikegami

+0

**和**它是無害的;列表中或結尾處的額外逗號是可選的。 – Massa

回答

3

不,這個逗號主要是放錯地方的和沒有意義的。

然而,這並不影響代碼,因爲你傳遞的參數傳過來的哈希和哈希基本上沒有別的比鍵值對的列表。 脂肪逗號(哈希火箭在其他語言)=>也可以視爲一個簡單的逗號 - 這主要是針對有表示這樣的鍵值對。

你也可以寫:

GetOptions(
    "display=s", \$display, 
    "input=s", \$input, 
) 

與您額外的逗號就成了:

GetOptions(
    "display=s", \$display, 
    "input=s", , \$input, 
) 

不會改變,因爲在所有兩個或多個逗號和/或火箭榜上有名簡單地用perl作爲一個逗號對待。

@a = (1, 2, 3, , , 6 => 7, 6); 
print join(",", @a), "\n"; 

1,2,3,6,7,6 

所以:它沒有傷害,但由於它會導致混淆,我建議將其刪除。

+1

我認爲你應該非常明確地提到在建立一個列表的時候,2個逗號(或者逗號+火箭)被perl簡單地視爲一個逗號,如你最後的代碼片段所示。 – DVK

+0

是的,謝謝 - 我錯過了就別提了。我相應地編輯了頁面 –

+0

有趣的事實:它甚至不是一個副作用。解析器明確忽略了重複的逗號。例如'1,2,(),3,4'返回與'1,2,3,4'相同的東西,但是它們被編譯爲不同的操作碼。另一方面,編譯爲相同操作碼的'1,2,3,4和1,2,3,4'。 – ikegami