以下代碼直接從Tie :: File模塊的源代碼中提取。在這種情況下,空括號在O_ACCMODE的定義中完成了什麼?我知道使用了哪些子程序原型,但這種用法似乎與此無關。()在Perl的子程序定義中完成了什麼?
use Fcntl 'O_CREAT', 'O_RDWR', 'LOCK_EX', 'LOCK_SH', 'O_WRONLY', 'O_RDONLY';
sub O_ACCMODE() { O_RDONLY | O_RDWR | O_WRONLY }
以下代碼直接從Tie :: File模塊的源代碼中提取。在這種情況下,空括號在O_ACCMODE的定義中完成了什麼?我知道使用了哪些子程序原型,但這種用法似乎與此無關。()在Perl的子程序定義中完成了什麼?
use Fcntl 'O_CREAT', 'O_RDWR', 'LOCK_EX', 'LOCK_SH', 'O_WRONLY', 'O_RDONLY';
sub O_ACCMODE() { O_RDONLY | O_RDWR | O_WRONLY }
:
有原型的功能()是 內聯
潛在的候選人還告訴O_ACCMODE
不採取解析器在除了&O_ACCMODE()
之外的任何情況下都可能不需要考慮)。這使得它表現得像大多數人所期望的那樣。
作爲一個簡單的例子,在:
sub FOO { 1 }
sub BAR { 2 }
print FOO + BAR;
最後一行解析作爲print FOO(+BAR())
和打印的值是1,因爲當prototypeless子被不帶括號它試圖像一個listop和嘟嘟地喝術語儘可能地正確。
在:
sub FOO() { 1 }
sub BAR() { 2 }
print FOO + BAR;
最後一行解析作爲print FOO() + BAR()
和打印的值是3,這是因爲()
原型告訴給FOO
沒有參數被預期或有效的解析器。
謝謝!非常翔實! – ennuikiller 2010-10-26 21:50:35