2015-08-16 118 views

回答

9

print是有特殊的語法規則特殊內置Perl函數。 Documentation列出四種可能的調用:

print FILEHANDLE LIST 
print FILEHANDLE 
print LIST 
print 

因此,雖然在一般的函數參數由逗號(,)是分離的,這是從歧義消除內容打印目標的例外打印。顯示此行爲的另一個函數是system

共享此語法的其他功能稱爲"Indirect Object Notation"。在形式表達:

function object arg1, arg2, … angn 
#    ^- no comma here 

等同於:

object->function(arg1, arg2, … argn) 

讓下面的語句對是相同的:

$foo = new Bar; 
$foo = Bar->new; 

間接對象符號具有several problems,一般應該避免,保存爲數不多的知名成語,如print F "something"

+2

不幸的是,這是錯誤的。 'print'是具有自定義分析規則的運算符。 'print HANDLE LIST'不是一個間接的方法調用。它會忽視HANDLE的課程。你可以使用'perl -MScalar :: Util = blessed -E'sub IO :: File :: print {die}來驗證它是否有福(* STDOUT {IO});打印標準輸出「foo \ n」; STDOUT-> print(「foo \ n」);'' – ikegami

+0

@ikegami:非常感謝您的指出! –

4

在該示例中,因爲print接受參數列表並且具有默認值。所以你需要告訴打印一個標量和打印文件句柄之間的區別。

解釋器可以告訴之間的區別:

print $fh "some scalar text"; 
print $bar, "set to a value ","\n"; 
print $fh; 
print $bar; 

但是,這是一個比較特殊的情況 - 大部分功能不喜歡的工作。我通常建議打印,圍繞大括號中的文件句柄arg區分。

你可以看一下原型,以此來獲得perl的做事情的參數,但我還常建議,使更少的代碼清晰

+1

有我這是一個額外的轉折點。在上面的例子中,第三行和第四行將打印$ fh和$ bar到當前選定的文件句柄。另一方面,「打印FH」會打印$ _到真正的文件句柄FH。 – BarneySchmale