位置:轻松日志 » 帮助/文摘

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函数分类

下面是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 和其他平台的说明文档以获得更多关于移植性的资料

按字母顺序排列的PERL函数

-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,


收藏这篇文章

 

© 2007 Rocklv个人主页空间轻松日志v.1.1