解析Perl内部函数用法

开发 架构
本文向大家简单介绍一下Perl函数的用法,Perl函数主要分为两类:数组运算符和命名的一元运算符。不同之处在于他们的优先级关系。

本文和大家重点讨论一下Perl内部函数的概念,Perl函数主要分为两类:数组运算符和命名的一元运算符。数组运算符需要一个以上的参数,而一元运算符不能超过一个参数,一元运算符一般只提供一个标量作为参数,而数组运算符可能会提供标量或者数组作为参数。

Perl内部函数

Perl函数主要分为两类:数组运算符和命名的一元运算符。不同之处在于他们的优先级关系。(参阅优先级表)数组运算符需要一个以上的参数,而一元运算符不能超过一个参数。因此,一个逗号将结束一个一元运算符,对于数组运算符,只是起到分隔的作用。一元运算符一般只提供一个标量作为参数,而数组运算符可能会提供标量或者数组作为参数。如果二者都有,标量参数一般在前面,数组参数跟在后面。(注意,可以只有一个数组变量)比如,splice()有三个标量变量,后面加上一个数组,相反gethostbyname()有四个标量变量。

在语法描述中,数组运算符需要一个用LIST标识的数组作为参数。这些数组可能由标量参数和数组值混合组成;
数组值将包含在数组中,每个元素被插入数组中,形成一个更长一维的数组值。数组的元素应该用逗号分开。

下面列出的函数有的在参数两边有括号,有的没有。(语法描述中省略括号)

如果你使用括号,一个简单的规则是(偶尔会令人吃惊):如果是函数,没有优先级的问题;如果它是一个数组运算符或者一元运算符
那么就要考虑优先级。并且,函数两边的空白和"("是不计算的--因此,有时候需要小心行事。看看下面的几个例子:

print1+2+4; #Prints7.
print(1+2)+4; #Prints3.
print(1+2)+4; #Alsoprints3!
print+(1+2)+4; #Prints7.
print((1+2)+4); #Prints7.

前面说得似乎有点抽象,那么你在运行Perl时带上-w开关你将得到一些警告信息,您可以根据这些信息再体会一下。例如,上面的例子会产生如下信息:
print(...)interpretedasfunctionat-line1.
Uselessuseofintegeradditioninvoidcontextat-line1.
有些Perl函数根本不需要参数,因此工作方式和一元运算符和数组运算符都不同,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//

Perl函数之数字运算函数

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

Perl函数之真实哈希函数

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

Perl函数之文件,目录函数

-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
Miscellaneousfunctions
defined,dump,eval,formline,local,my,reset,scalar,undef,wantarray

Perl函数之进程和进程组函数

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

【编辑推荐】

  1. Perl函数集-数组和Perl列表函数解析
  2. Perl语言中Perl函数用法
  3. 解析两大Perl标量的操作符
  4. Perl函数手册专家指导
  5. 技术分享 详解Perl函数的参数接收方法


 

责任编辑:佚名 来源: csdn.net
相关推荐

2010-07-16 16:56:01

Perl构造函数

2010-07-19 14:20:57

Perl函数

2010-07-19 14:37:01

Perl进程启动函数

2010-07-13 10:13:35

Perl内部函数

2010-07-16 17:04:38

Perl方法

2010-07-15 13:50:16

Perl目录操作函数

2010-07-19 10:01:57

Perl函数

2010-07-13 13:49:43

Perl foreac

2010-07-23 15:59:33

Perl encode

2010-07-14 15:32:21

Perl转义字符

2010-07-16 13:10:36

Perl哈希表

2010-07-21 13:59:59

Perl引用

2010-07-15 10:22:23

Perl控制结构

2010-07-16 08:47:53

Perl if语句

2010-07-20 09:45:04

Perl继承

2010-07-19 15:01:26

Perl数学函数

2010-07-20 15:02:20

Perl数组

2010-07-23 13:53:33

Perl grep函数

2010-07-19 13:49:17

Perl函数

2010-07-26 15:17:51

Perl解析XML文件
点赞
收藏

51CTO技术栈公众号