代码之家  ›  专栏  ›  技术社区  ›  ennuikiller

()在Perl的子例程定义中完成了什么?

  •  4
  • ennuikiller  · 技术社区  · 14 年前

    以下代码直接从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 }
    
    3 回复  |  直到 14 年前
        1
  •  11
  •   FMc TLP    14 年前

    perlsub 关于常数函数的主题:

    原型为()的函数是 潜在的内衬候选人

        2
  •  12
  •   hobbs    14 年前

    它还告诉解析器 O_ACCMODE 在任何情况下都不接受辩论(除非 &O_ACCMODE() 你可能永远都不需要考虑。这使得它的行为就像大多数人所期望的那样。

    例如,在:

    sub FOO { 1 }
    sub BAR { 2 }
    
    print FOO + BAR;
    

    最后一行分析为 print FOO(+BAR()) 打印的值是1,因为当一个没有parens的原型Sub被调用时,它试图尽可能地像一个listop和slurp术语。

    在:

    sub FOO () { 1 }
    sub BAR () { 2 }
    
    print FOO + BAR;
    

    最后一行分析为 print FOO() + BAR() 打印的值是3,因为 () 原型告诉解析器 FOO 应为或有效。

        3
  •  7
  •   Eugene Yarmash    14 年前

    的原型 () 使子例程符合内联条件。这个被 constant 例如,pragma。

    Constant Functions 在珀尔苏尔。