我建立了一個簡單的子程序,並且我有一個關於是否需要括號的問題。Perl子程序 - 它們是否需要用圓括號調用?
#!/usr/bin/perl
sub echo {
print "@_ \n" ;
}
echo(@ARGV);
當我使用
echo @ARGV
或
echo (@ARGV)
或(無空格)
echo(@ARGV)
他們所有的工作。哪一個是正確的?
我建立了一個簡單的子程序,並且我有一個關於是否需要括號的問題。Perl子程序 - 它們是否需要用圓括號調用?
#!/usr/bin/perl
sub echo {
print "@_ \n" ;
}
echo(@ARGV);
當我使用
echo @ARGV
或
echo (@ARGV)
或(無空格)
echo(@ARGV)
他們所有的工作。哪一個是正確的?
parens是可選的。你需要他們在某些情況下,以明確顯示其值是函數的自變量,例如,傳遞結果時,一個函數調用另一個函數:
myfunc(1, 2, otherfunc(3), "z");
如果沒有括號的3左右,otherfunc
將同時接收3和「z」作爲參數。
正如xxfelixxx提到的那樣,最好始終使用它們。
echo @ARGV
,echo (@ARGV)
和echo(@ARGV)
在技術上所有正確的,你的情況,但使用括號是有時必要;除此之外,這是一個事情的選擇,有些人僱用公約什麼時候使用什麼風格。
括在括號中的整個參數列表總是工作 - 空間是否先於左括號或不 - echo (@ARGV)
或echo(@ARGV)
- 是否你調用內置或用戶定義的函數(子程序) :
perldoc perlstyle
建議函數名和(
之間沒有空格 - echo(@ARGV)
。print (1 + 2) + 4
僅打印3
,因爲(1 + 2)
被解釋爲整個參數列表(與+ 4
加到表達式值的print
調用,其結果不輸出)。print((1 + 2) + 4)
解決了歧義並打印7
。+
以達到相同的效果:print +(1 + 2) + 4
也打印7
。不使用括號 - echo @ARGV
- 工程:
sub <name>;
之前其調用。use
之前其調用(require
不夠)。&echo @ARGV
工作,它繞過了函數可能聲明的任何原型(參數類型的一種形式))。至於約定:
[TMTOWTDI](https://en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it)? –
'perldoc perlstyle'建議'函數名和它的左括號之間沒有空格。「使用括號表明它是用戶定義的函數,而不是內置函數。 – xxfelixxx
@xxfelixxx:良好的信息空間,但要清楚:我假設你建議採用_convention_來調用所有用戶定義的函數_with_小括號和內置_without_(但是,技術上,可以調用內置函數_can_ _with_小括號和用戶定義的函數_can_可以被調用_without_括號,如果預先聲明的話)。 – mklement0