我正在阅读Simon Cozens的
Beginning Perl,在第8章 – 子程序中,他指出“子程序”是用户功能,而打印,打开,分割等是内置的操作符或函数.
他们是什么?他们真的是内置的,语言固有的功能(如C的运算符大小),还是实际上是主模块的子程序/函数?
如果他们是子程序,同时,为,除非等等也是子例程?操作符如何,–,eq等?
解决方法
打印,拆分不是子程序.他们不会产生次呼叫.他们甚至没有出现在符号表中(在main ::或其他方面,尽管你可以将它们称为CORE :: split等),并且不能获得对它们的代码的引用(尽管正在进行工作来创建代理当你想把它们视为子程序时,它们在CORE ::中为它们隐藏).他们就是操作符.
$perl -MO=Concise,-exec -e'sub f {} f()' 1 <0> enter 2 <;> nextstate(main 2 -e:1) v:{ 3 <0> pushmark s 4 <#> gv[*f] s 5 <1> entersub[t3] vKS/TARG,1 <--- sub call 6 <@> leave[1 ref] vKP/REFC -e Syntax OK $perl -MO=Concise,-exec -e'split /;/' 1 <0> enter 2 <;> nextstate(main 1 -e:1) v:{ 3 </> pushre(/";"/) s/64 4 <#> gvsv[*_] s 5 <$> const[IV 0] s 6 <@> split[t2] vK <--- not a sub call 7 <@> leave[1 ref] vKP/REFC -e Syntax OK $perl -MO=Concise,-exec -e'$x + $y' 1 <0> enter 2 <;> nextstate(main 1 -e:1) v:{ 3 <#> gvsv[*x] s 4 <#> gvsv[*y] s 5 <2> add[t3] vK/2 <--- Just like this 6 <@> leave[1 ref] vKP/REFC -e Syntax OK
他们以各种名称而闻名:
大多数被认为是以下之一:
>列表运算符
>命名一元运算符
子程序通常被称为函数(因为它们在C和C中),因此“函数”是一个模糊的词.这个歧义似乎是你问题的基础.
至于while,for,除非等,它们是“流控制语句”使用的关键字
while (f()) { g() }
和“声明修饰符”
g() while f();