一个字母的子名称。什么时候是个坏主意?

Kje*_* S. 1 perl

我在调用一个类似于下面的测试的只有一个字母的 sub 时遇到了问题。而且我无法找到一些允许字母而不是这里的逻辑。有没有?我明白为什么sub m是一个坏主意,因为它与m(regex), 等价的/regex/. 但为什么是其他人?

在下面的测试中,a、D、E、F 都可以。其余的syntax error根据 perl v5.26 和 v5.30(我检查的唯一两个版本)

perl -le'sub a{3*pop} print "a: ",a(7)-a(5)'              #prints 6
perl -le'sub b{3*pop} print "b: ",b(7)-b(5)'              #syntax error
perl -le'sub c{3*pop} print "c: ",c(7)-c(5)'              #syntax error
perl -le'sub d{3*pop} print "d: ",d(7)-d(5)'              #syntax error
perl -le'sub e{3*pop} print "e: ",e(7)-e(5)'              #syntax error
perl -le'sub f{3*pop} print "f: ",f(7)-f(5)'              #syntax error
perl -le'sub A{3*pop} print "A: ",A(7)-A(5)'              #syntax error
perl -le'sub B{3*pop} print "B: ",B(7)-B(5)'              #syntax error
perl -le'sub C{3*pop} print "C: ",C(7)-C(5)'              #syntax error
perl -le'sub D{3*pop} print "D: ",D(7)-D(5)'              #prints 6
perl -le'sub E{3*pop} print "E: ",E(7)-E(5)'              #prints 6
perl -le'sub F{3*pop} print "F: ",F(7)-F(5)'              #prints 6
perl -le'sub b{3*pop} print "&b: ",b(7)-&b(5)'            #prints 6
perl -le'sub b{3*pop} print " b: ",b(7)- b(5)'            #prints 6
perl -le'sub m{3*pop} print "m: ",m(7)-m(5)'            #prints 0
Run Code Online (Sandbox Code Playgroud)

hob*_*bbs 6

馊主意?总是,几乎。

在这种特定情况下有什么问题?文件测试操作符。当您编写时b(7)-b(5),Perl 没有看到-二元运算符,然后是函数调用b(5),它看到的是文件测试运算符-b,然后抛出语法错误,因为找不到文件测试运算符(或任何类型的一个术语)紧跟在函数调用之后。文件测试操作符使用 27 个不同的字母(一些大写和一些小写)。

如果你写了,b(7) - b(5)那么你就不会得到语法错误,因为-b不会在你的代码中找到......但这无论如何都不会使单字母名称成为一个好主意。

  • 此外,q、m、s、y 表示单引号或正则表达式文字的开始 (3认同)