enn*_*ler 4 perl prototype definition subroutine
以下代码直接从Tie :: File模块的源代码中提取.在这种情况下,O_ACCMODE定义中空括号的作用是什么?我知道使用了什么子程序原型,但这种用法似乎与此无关.
use Fcntl 'O_CREAT', 'O_RDWR', 'LOCK_EX', 'LOCK_SH', 'O_WRONLY', 'O_RDONLY';
sub O_ACCMODE () { O_RDONLY | O_RDWR | O_WRONLY }
Run Code Online (Sandbox Code Playgroud)
hob*_*bbs 12
它还告诉解析器O_ACCMODE
在任何条件下都不接受参数(除非&O_ACCMODE()
您可能永远不必考虑).这使得它的行为就像大多数人期望的一样.
作为一个简单的例子,在:
sub FOO { 1 }
sub BAR { 2 }
print FOO + BAR;
Run Code Online (Sandbox Code Playgroud)
最后一行解析为,print FOO(+BAR())
并且打印的值为1,因为当没有parens调用无原型子时,它会尽可能地像listop和slurp一样行动.
在:
sub FOO () { 1 }
sub BAR () { 2 }
print FOO + BAR;
Run Code Online (Sandbox Code Playgroud)
最后一行解析为print FOO() + BAR()
,打印的值为3,因为()
原型告诉解析器没有FOO
预期或有效的参数.
归档时间: |
|
查看次数: |
213 次 |
最近记录: |