2014-02-05 57 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