位置:轻松日志 » 帮助/文摘
PERL内部函数
发表于:2004/09/22 17:38:26
PERL内部函数
PERL中的函数主要分为两类:数组运算符和命名的一元运算符。不同之处在于他们的优先级关系。(参阅优先级表 ) 数组运算符需要一个以上的参数,而一元运算符不能超过一个参数。因此,一个逗号将结束一个一元运算符, 对于数组运算符,只是起到分隔的作用。一元运算符一般只提供一个标量作为参数,而数组运算符可能会提供标量或者数组作为参数。如果二者都有,标量参数一般在前面,数组参数跟在后面。 (注意,可以只有一个数组变量) 比如, splice() 有三个标量变量,后面加上一个数组, 相反 gethostbyname() 有四个标量变量。
在语法描述中,数组运算符需要一个用LIST标识的数组作为参数。这些 数组可能由标量参数和数组值混合组成;
数组值将包含在数组中,每个元素被插入数组中,
形成一个更长一维的数组值。 数组的元素应该用逗号分开。
下面列出的函数有的在参数两边有括号,有的没有。(语法描述中省略括号)
如果你使用括号,一个简单的规则是 (偶尔会令人吃惊):如果是函数,没有优先级的问题;如果它是一个数组运算符或者一元运算符
那么就要考虑优先级。并且,函数两边的空白和 "(" 是不计算的--因此,有时候需要小心行事。看看下面的几个例子: 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. 系统调用出错时出错信息将通过特殊变量$!返回。其他的函数则不会,除非发生意外。
下面是Perl中的函数(包括看起来像函数的,如某些关键词,命名运算符)的分类. 有些函数在多处出现了。
- 标量和字符串函数
chomp, chop, chr, crypt, hex, index, lc, lcfirst, length, oct, ord, pack, q/STRING/, qq/STRING/, reverse, rindex, sprintf, substr, tr///, uc, ucfirst, y///
- 正则表达式和模式匹配
m//, pos, quotemeta, s///, split, study, qr//
- 数字运算函数
abs, atan2, cos, exp, hex, int, log, oct, rand, sin, sqrt, srand
- 真实数组函数
pop, push, shift, splice, unshift
- 列表数据函数
grep, join, map, qw/STRING/, reverse, sort, unpack
- 真实哈希函数
delete, each, exists, keys, values
- 输入输出函数
binmode, close, closedir, dbmclose, dbmopen, die, eof, fileno, flock, format, getc, print, printf, read, readdir, rewinddir, seek, seekdir, select, syscall, sysread, sysseek, syswrite, tell, telldir, truncate, warn, write
- 固定长度的数据或记录函数
pack, read, syscall, sysread, syswrite, unpack, vec
- 文件,目录函数
-X, chdir, chmod, chown, chroot, fcntl, glob, ioctl, link, lstat, mkdir, open, opendir, readlink, rename, rmdir, stat, symlink, umask, unlink, utime
- 流控制关键词
caller, continue, die, do, dump, eval, exit, goto, last, next, redo, return, sub, wantarray
- 作用域关键词
caller, import, local, my, package, use
- Miscellaneous functions
defined, dump, eval, formline, local, my, reset, scalar, undef, wantarray
- 进程和进程组函数
alarm, exec, fork, getpgrp, getppid, getpriority, kill, pipe, qx/STRING/, setpgrp, setpriority, sleep, system, times, wait, waitpid
- PERL模块关键词
do, import, no, package, require, use
- 类和面向对象关键词
bless, dbmclose, dbmopen, package, ref, tie, tied, untie, use
- socket函数
accept, bind, connect, getpeername, getsockname, getsockopt, listen, recv, send, setsockopt, shutdown, socket, socketpair
- 进程间通讯函数
msgctl, msgget, msgrcv, msgsnd, semctl, semget, semop, shmctl, shmget, shmread, shmwrite
- 获取用户信息函数
endgrent, endhostent, endnetent, endpwent, getgrent, getgrgid, getgrnam, getlogin, getpwent, getpwnam, getpwuid, setgrent, setpwent
- 获取网络信息函数
endprotoent, endservent, gethostbyaddr, gethostbyname, gethostent, getnetbyaddr, getnetbyname, getnetent, getprotobyname, getprotobynumber, getprotoent, getservbyname, getservbyport, getservent, sethostent, setnetent, setprotoent, setservent
- 时间函数
gmtime, localtime, time, times
- PERL5中的新函数
-
abs, bless, chomp, chr, exists, formline, glob, import, lc, lcfirst, map, my, no, prototype, qx, qw, readline, readpipe, ref, sub*, sysopen, tie, tied, uc, ucfirst, untie, use
* - sub was a keyword in perl4, but in perl5 it is an operator, which can be used in expressions.
- PERL5中过时的函数
dbmclose, dbmopen
PERL诞生于UNIX,因此可以访问所有的一般系统调用。在非UNIX环境中,某些UNIX下有的调用是没有实现的,或者有轻微的区别。受到影响的有:
-X, binmode, chmod, chown, chroot, crypt, dbmclose, dbmopen, dump, endgrent, endhostent, endnetent, endprotoent, endpwent, endservent, exec, fcntl, flock, fork, getgrent, getgrgid, gethostent, getlogin, getnetbyaddr, getnetbyname, getnetent, getppid, getprgp, getpriority, getprotobynumber, getprotoent, getpwent, getpwnam, getpwuid, getservbyport, getservent, getsockopt, glob, ioctl, kill, link, lstat, msgctl, msgget, msgrcv, msgsnd, open, pipe, readlink, rename, select, semctl, semget, semop, setgrent, sethostent, setnetent, setpgrp, setpriority, setprotoent, setpwent, setservent, setsockopt, shmctl, shmget, shmread, shmwrite, socket, socketpair, stat, symlink, syscall, sysopen, system, times, truncate, umask, unlink, utime, wait, waitpid
参阅perlport 和其他平台的说明文档以获得更多关于移植性的资料
-X
abs, accept, alarm, atan2
bind, binmode, bless
caller, chdir, chmod, chomp, chop, chown, chr, chroot, close, closedir, connect, continue, cos, crypt
dbmclose, dbmopen, defined, delete, die, do, dump
each, endgrent, endhostent, endnetent, endprotoent, endpwent, endservent, eof, eval, exec, exists, exit, exp
fcntl, fileno, flock, fork, format, formline
getc, getgrent, getgrgid, getgrnam, gethostbyaddr, gethostbyname, gethostent, getlogin, getnetbyaddr, getnetbyname, getnetent, getpeername, getpgrp, getppid, getpriority, getprotobyname, getprotobynumber, getprotoent, getpwent, getpwnam, getpwuid, getservbyname, getservbyport, getservent, getsockname, getsockopt, glob, gmtime, goto, grep
hex
import, index, int, ioctl
join
keys, kill
last, lc, lcfirst, length, link, listen, local, localtime, lock, log, lstat
m, map, mkdir, msgctl, msgget, msgrcv, msgsnd, my
next, no
oct, open, opendir, ord, our
pack, package, pipe, pop, pos, print, printf, prototype, push
q, qq, qr, quotemeta, qw, qx
rand, read, readdir, readline, readlink, readpipe, recv, redo, ref, rename, require, reset, return, reverse, rewinddir, rindex, rmdir
s, scalar, seek, seekdir, select, semctl, semget, semop, send, setgrent, sethostent, setnetent, setpgrp, setpriority, setprotoent, setpwent, setservent, setsockopt, shift, shmctl, shmget, shmread, shmwrite, shutdown, sin, sleep, socket, socketpair, sort, splice, split,
|
收藏这篇文章
|