2012-10-15 148 views
0

可能重複:
When should I use the & to call a Perl subroutine?基礎上與Logit模型()

我是新來的Perl的開發,只是通過一個實例代碼去。

我遇到了& LogIt()我有幾個基本問​​題開始。我從Google獲得信息,就像它將錯誤/信息記錄到日誌文件中一樣。

&LogIt("Failed to create folder."); 

在上面的代碼,這是什麼 '&' 代表? Logit()和LogIt()之間有什麼區別/影響?& LogIt msg「無法創建文件夾」會打印在某處嗎?誰會使用這個味精?

請讓我知道一些最基本的內容& Logit模型()。

+0

確定。我會指出這一點。謝謝! –

回答

3

這是考古價值。和號用於調用子程序。你會發現所有的血淋淋的細節on that page

它仍然有效,但不應該使用,除了非常特殊的情況下(如參照子程序或檢查它是否被定義或沒有)。

請注意,&foo&foo()並不意味着同樣的事情。後者採用括號中的參數(如果沒有提供,則沒有參數)。前者不能用參數調用,但將當前值@_作爲參數。因此,下面的塊:

@_ = (10, 20) ; 
&foo() ; 
&foo ; 

sub foo { print "args=$_[0], $_[1]\n" ; } 

將產生以下輸出:

args=, 
args=10, 20 
+0

感謝您的鏈接和解釋! –

0

函數前面的&的行爲與標量前面的$相似。解釋者告訴特定變量是什麼是一個印記。

但是,如果您有括號,則不需要使用函數。因此&foo&foo()foo()意味着幾乎相同的東西。

它們之間的區別在於傳遞給函數的參數。對foo()的調用不傳遞任何參數。致電&foo傳遞當前@_到foo。

明確和使用印記的好處是您可以在使用時省略空的()。例如

&foo 
foo() 

如果foo沒有檢查它的參數,或者如果當前@_是空的。

或者,如果你要調用foo(@_)可以簡單的寫

`&foo` 

但是我要說的是許多Perl程序員仍然傾向於在的情況下,即使使用()時不要求作爲唯一的其他語言(我知道)有可選的括號是COBOL。

只需決定是否打算在整個代碼庫中使用&並堅持下去!否則,可能會令人困惑(或煩人)閱讀。

+1

這是不正確的。 '&foo'和'&foo()'不一樣;前者傳遞當前的'@ _'作爲參數的隱式列表。 – January

+0

是的,我忘記了,我很抱歉,正在更新 – jozefg