2014-02-05 58 views
0

最新下面catfile命令在Perl的2之間的差差異與括號

my $test = File::Spec->catfile(A, B,C); 

my $test = File::Spec->catfile((A, B), C); 

回答

3

那麼,第二個包括 「C」,並且所述第一一個沒有。 [更新:現在問題已經更新,它們都包含「C」。]

除此之外,它們是相同的。方法調用的參數(以及一般的子例程調用)被平化爲一個列表。括號不做任何事情。

(旁白:在技術上名單(A, B, C)((A, B), C)建立不同optrees,但差異出現在一個非常低的水平,除非它拉一些相當廣泛的特技在Perl內部閒逛,catfile將無法​​分辨)

在某些情況下,這樣的括號雖然沒有做任何事情,但可能有助於澄清 - 在這種情況下,作者可能會添加它們以明確「A」和「B」在概念上與「C」不同。如果你熟悉File :: Spec的API,那麼你會知道catfile的最後一個參數是一個文件名,而其他的是目錄名。所以這可能是他們用括號在視覺上分開的原因。

+0

讓我們假設如果B是可選的,那我該怎麼做呢? – chiru

+0

一般來說,如果參數是可選的,而您不想提供它,則只需從列表中省略。 'foo($ x,$ y)'對'foo($ x)'。 – tobyink

+0

我正試圖解決一些問題,我想在某些Linux盒子中找到C,它的A/C在某些A/B/C中,因此B是可選的。如何去捕獲它們? – chiru