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

  • 本文关键字:什么时候 一个 perl
  • 更新时间 :
  • 英文 :


我在调用与下面测试类似的一个字母命名的子时遇到了一个问题。我找不到一些逻辑,哪些字母是允许的,而不是这里。有吗?我明白为什么sub m是一个坏主意,因为它与m(regex)冲突,相当于/regex/。但为什么是其他人呢?

下面的a、D、E、F项测试是ok的。根据perl v5.26和v5.30(我只检查了两个版本),剩下的变成了syntax error

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

坏主意?总是这样,差不多。

在这个特定的案例中问题是什么?文件测试操作符。当您编写b(7)-b(5)时,Perl没有看到-二进制运算符,然后函数调用b(5),它看到文件测试运算符-b,然后抛出语法错误,因为在函数调用之后立即查找文件测试运算符(或任何类型的术语)没有意义。文件测试操作符有27个不同的字母(一些大写,一些小写)。

如果你写了b(7) - b(5),那么你就不会得到一个语法错误,因为-b不会在你的代码中找到…但这并不意味着单字母的名字是个好主意。

最新更新