- 论坛徽章:
- 1
|
- 下面列出的函数有的在参数两边有括号,有的没有。(语法描述中省略括号)
- 如果你使用括号,一个简单的规则是 (偶尔会令人吃惊):如果是函数,没有优先级的问题;如果它是一个数组运算符或者一元运算符
- 那么就要考虑优先级。并且,函数两边的空白和 "(" 是不计算的--因此,有时候需要小心行事。看看下面的几个例子:
- print 1+2+4; # Prints 7.
- print(1+2) + 4; # Prints 3.
- print (1+2)+4; # Also prints 3!
- print +(1+2)+4; # Prints 7.
- print ((1+2)+4); # Prints 7.
- 前面说得似乎有点抽象,那么你在运行PERL时带上-w开关你将得到一些警告信息,您可以根据这些信息再体会一下。例如,上面的例子会产生如下信息:
- print (...) interpreted as function at - line 1.
- Useless use of integer addition in void context at - line 1.
- 有些函数根本不需要参数,因此工作方式和一元运算符和数组运算符都不同, time 和 endpwent算是两个典型吧. 如, time+86_400 实际上是time() + 86_400.
- 对于可以用在标量或者数组的上下文中的函数,非失败性的错误在标量环境下通常暗示返回了未定义的值或在数组环境下返回一个空的数组。
- 记住下面的重要原则:
- 没有规则和数组环境下的表达式的行为和他的标量环境的行为有关系,反之亦然。 这可能产生两种完全不同的情况。在标量环境下,每个运算符和函数决定怎样以最恰当的次序返回值。 有些运算符在数组环境下返回数组的长度.,有些运算符返回的一个元素,有些返回数组中的最后一个元素,有些返回成功执行的操作的语句数。通常,他们返回一些你需要的值,除非你需要连续性。
- 在标量环境下的命名数组在第一眼看上去时和在标量环境下的列表有很大的不同。 在标量环境下,你不能得到一个像(1,2,3) 的列表,因为在编译时,编译器是知道当前环境的,它将在那里产生标量的逗号运算符, 而不是用于分隔数组元素的逗号. 也就是说,它永远不会以一个数组开始。
- 一般说来, PERL中的函数对应相应的系统调用 (如 chown(2), fork(2), closedir(2), 等等.) 成功调用后返回真值,否则返回 undef , 下面将会提到。这一点和C的接口不一样,C中出错时将返回-1.但是也有几个例外,他们是 wait, waitpid, 和 syscall. 系统调用出错时出错信息将通过特殊变量$!返回。其他的函数则不会,除非发生意外。
复制代码 |
|