2011-09-21 484 views
4

可能重複:
What does the function declaration 「sub function($$)」 mean?&@是什麼意思?

sub t(&@) { 
    print @_; 
} 
t {print 1}; 

我試圖改變&@&$,它會失敗。

這是什麼術語,以便我可以搜索?

+2

這是一個原型。 – Alex

+0

請參閱代碼示例中的第8行[此處](http://perldoc.perl.org/perlsub.html#Prototypes) –

+0

另請參閱[this old rant](http://www.perlmonks.org/?node_id= 406231)關於爲什麼你可能不應該使用原型。 –

回答

5

&@是子程序原型。這使您可以創建類似於內置函數的語法(接受BLOCK,然後使用LIST)。 列表甚至可以是空列表:()

&$在使用時將強制在標量上下文中評估第二個參數(這是強制的)。由於t {print 1};中沒有第二個參數,它將無法編譯。

閱讀有關子程序原型的更多信息:perldoc perlsub

+0

'&$'和'&; $'有什麼區別? –

+0

';'使參數的其餘部分可選。 –

0

您正在尋找的術語是「perl function prototypes」。

1

我不太清楚你想要代碼做什麼,但是你正在爲你的子創建一個原型,請參閱perldocs&表示子t將塊作爲第一個參數,@表示其餘參數是一個數組。

當你調用你的函數時,你傳遞了一個參數,塊{print 1},這就是你打印出來的 - CODE引用作爲一個字符串。 &$失敗的原因是您沒有傳遞第二個參數。對於&@這很好,因爲第二個參數是空數組。

+1

與所有答案的驅動器downvotes什麼? – cftarnas

+0

我認爲有人正在與社區合作。 –