perl函数集经典Word文件下载.docx
- 文档编号:20082035
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:17
- 大小:22.92KB
perl函数集经典Word文件下载.docx
《perl函数集经典Word文件下载.docx》由会员分享,可在线阅读,更多相关《perl函数集经典Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
#thisistheparentprocess
}
结果输出无
函数名pipe
调用语法pipe(infile,outfile);
解说与fork合用,给父进程和子进程提供通信的方式。
送到outfile文件变量的信息可以通过infile文件变量读取。
步骤:
1、调用pipe
2、用fork将程序分成父进程和子进程
3、一个进程关掉infile,另一个关掉outfile
例子pipe(INPUT,OUTPUT);
$retval=fork();
if($retval!
=0){
#thisistheparentprocess
close(INPUT);
print("
Enteralineofinput:
\n"
$line=<
STDIN>
printOUTPUT($line);
close(OUTPUT);
INPUT>
print($line);
exit(0);
}
结果输出$
program
Hereisatestline
$
函数名exec
调用语法exec(list);
解说与system类似,区别是启动新进程前结束当前程序。
常与fork合用,当fork分成两个进程后,子进程用exec启动另一个程序。
例子
结果输出
函数名syscall
调用语法syscall(list);
解说调用系统函数,list第一个元素是系统调用名,其余为参数。
如果参数是数字,就转化成C的整型数(typeint)。
否则传递字符串的指针。
详见UNIX的帮助或Perl文档。
使用syscall必须包含文件syscall.pl,即:
require("
syscall.ph"
函数名die
调用语法die(message);
解说终止程序并向STDERR输出错误信息。
message可以为字符串或列表。
如果最后一个参数不包含换行符,则程序文件名和行号也被输出。
例子die("
Cannotopeninputfile"
结果输出Cannotopeninputfileatmyprogline6.
函数名warn
调用语法warn(message);
解说与die类似,区别是不终止程序。
例子warn("
Danger!
Danger!
结果输出Danger!
函数名exit
调用语法exit(retcode);
解说终止程序并指定返回值。
例子exit
(2);
函数名kill
调用语法kill(signal,proclist);
解说给一组进程发送信号。
signal是发送的数字信号,9为杀掉进程。
proclist是进程ID列表。
详见kill的UNIX帮助。
函数名sleep
调用语法sleep(time);
解说将程序暂停一段时间。
time是停止的秒数。
返回值为实际停止的秒数。
例子sleep(5);
函数名wait
调用语法procid=wait();
解说暂停程序执行,等待子进程终止。
不需要参数,返回值为子进程ID,如果没有子进程,返回-1。
函数名waitpid
调用语法waitpid(procid,waitflag);
解说暂停程序执行,等待特定的子进程终止。
procid为等待的进程ID
例子$procid=fork();
if($procid==0){
thislineisprintedfirst\n"
exit(0);
waitpid($procid,0);
thislineisprintedlast\n"
结果输出$program
thislineisprintedfirst
thislineisprintedlast
4、其它控制函数
函数名caller
调用语法subinfo=caller();
解说返回调用者的程序名和行号,用于PerlDebugger。
返回值为三元素的列表:
1、调用处的包名
2、调用者文件名
3、调用处的行号
函数名chroot
调用语法chroot(dir);
解说改变程序的根目录,详见chroot帮助。
函数名local
调用语法local($variable);
解说在语句块(由大括号包围的语句集合)中定义局域变量,仅在此语句块中起作用,对其的改变不对块外同名变量造成影响。
千万不要在循环中使用,否则每次循环都定义一个新的局域变量!
函数名times
调用语法timelist=times
解说返回该程序及所有子进程消耗的工作时间。
返回值为四个浮点数的列表:
1、程序耗用的用户时间
2、程序耗用的系统时间
3、子进程耗用的用户时间
4、子进程耗用的系统时间
函数名sin
调用语法retval=sin(value);
解说参数为弧度值。
函数名cos
调用语法retval=cos(value);
函数名atan2
调用语法retval=atan2(value1,value2);
解说运算并返回value1除以value2结果的arctan值,单位为弧度,范围在-PI~PI。
应用例:
角度转化成弧度子程序。
subdegrees_to_radians{
local($degrees)=@_;
local($radians);
11:
$radians=atan2(1,1)*$degrees/45;
函数名sqrt
调用语法retval=sqrt(value);
解说平方根函数。
value为非负数。
函数名exp
调用语法retval=exp(value);
解说返回e的value次方。
函数名log
调用语法retval=log(value);
解说以e为底的自然对数。
函数名abs
调用语法retval=abs(value);
解说绝对值函数。
(Perl4中没有)
函数名rand
调用语法retval=rand(num);
解说随机数函数,返回0和整数num之间的一个浮点数。
函数名srand
调用语法srand(value);
解说初始化随机数生成器。
保证每次调用rand真正随机。
函数名index
调用语法position=index(string,substring,position);
解说返回子串substring在字符串string中的位置,如果不存在则返回-1。
参数position是可选项,表示匹配之前跳过的字符数,或者说从该位置开始匹配。
函数名rindex
调用语法position=rindex(string,substring,position);
解说与index类似,区别是从右端匹配。
函数名length
调用语法num=length(string);
解说返回字符串长度,或者说含有字符的数目。
函数名pos
调用语法offset=pos(string);
解说返回最后一次模式匹配的位置。
函数名substr
调用语法substr(expr,skipchars,length)
解说抽取字符串(或表达式生成的字符串)expr中的子串,跳过skipchars个字符,或者说从位置skipchars开始抽取子串(第一个字符位置为0),子串长度为length,此参数可忽略,意味着取剩下的全部字符。
当此函数出现在等式左边时,expr必须为变量或数组元素,此时其中部分子串被等式右边的值替换。
函数名study
调用语法study(scalar);
解说用一种内部格式提高变量的访问速度,同一时刻只对一个变量起作用。
函数名lc
uc
调用语法retval=lc(string);
retval=uc(string);
解说将字符串全部转换成小/大写字母。
函数名lcfirst
ucfirst
调用语法retval=lcfirst(string);
retval=ucfirst(string);
解说将第一个字母转换成小/大写。
函数名quotameta
调用语法newstring=quotemeta(oldstring);
解说将非单词的字母前面加上反斜线(\)。
语句:
$string=quotemeta($string);
等效于:
$string=~s/(\W)/\\$1/g;
常用于模式匹配操作中,确保字符串中没有字符被看作匹配操作符。
函数名join
调用语法join(joinstr,list);
解说把字符串列表(数组)组合成一个长的字符串,在每两个列表元素间插入串joinstr。
函数名sprintf
调用语法sprintf(string,fields);
解说与printf类似,区别是结果不输出到文件,而作为返回值赋给变量。
例子$num=26;
$outstr=sprintf("
%d=%xhexadecimalor%ooctal\n"
$num,$num,$num);
print($outstr);
结果输出26=1ahexadecimalor32octal
函数名chop
调用语法$lastchar=chop(var);
解说var可为变量或数组,当var为变量时,最后一个字符被删除并赋给$lastchar,当var为数组/列表时,所有元素的最后一个字符被删除,最后一个元素的最后一个字母赋给$lastchar。
函数名chomp
调用语法result=chomp(var);
解说检查字符串或字符串列表中元素的最后一个字符是否为由系统变量$/定义的行分隔符,如果是就删除。
返回值为实际删除的字符个数。
函数名crypt
调用语法result=crypt(original,salt);
解说用DES算法加密字符串,original是将要加密的字符串,salt是两个字符的字符串,定义如何改变DES算法,以使更难解码。
返回值为加密后的串。
函数名hex
调用语法decnum=hex(hexnum);
解说将十六进制数(字符串形式)转化为十进制数。
函数名int
调用语法intnum=int(floatnum);
解说将浮点数舍去小数部分转化为整型数。
函数名oct
调用语法decnum=oct(octnum);
解说将八进制数(字符串形式)或十六进制数("
0x.."
形式)转化为十进制数。
函数名ord
调用语法asciival=ord(char);
解说返回单个字符的ASCII值,与PASCAL中同名函数类似。
函数名chr
调用语法$char=chr(asciival);
解说返回ASCII值的相应字符,与PASCAL中同名函数类似。
函数名pack
调用语法formatstr=pack(packformat,list);
解说把一个列表或数组以在实际机器存贮格式或C等编程语言使用的格式转化(包装)到一个简单变量中。
参数packformat包含一个或多个格式字符,列表中每个元素对应一个,各格式字符间可用空格或tab隔开,因为pack忽略空格。
除了格式a、A和@外,重复使用一种格式多次可在其后加个整数,如:
$twoints=pack("
i2"
103,241);
把同一格式应用于所有的元素则加个*号,如:
$manyints=pack("
i*"
14,26,11,83);
对于a和A而言,其后的整数表示要创建的字符串长度,重复方法如下:
$strings=pack("
a6"
x2,"
test1"
test2"
格式@的情况比较特殊,其后必须加个整数,该数表示字符串必须的长度,如果长度不够,则用空字符(null)补足,如:
$output=pack("
a@6a"
test"
pack函数最常见的用途是创建可与C程序交互的数据,例如C语言中字符串均以空字符(null)结尾,创建这样的数据可以这样做:
$Cstring=pack("
ax"
$mystring);
下表是一些格式字符与C中数据类型的等价关系:
字符
等价C数据类型
Cchar
ddouble
ffloat
iint
Iunsignedint(orunsigned)
llong
Lunsignedlong
sshort
Sunsignedshort
完整的格式字符见下表。
格式字符
描述
a用空字符(null)补足的字符串
A用空格补足的字符串
b位串,低位在前
B位串,高位在前
c带符号字符(通常-128~127)
C无符号字符(通常8位)
d双精度浮点数
f单精度浮点数
h十六进制数串,低位在前
H十六进制数串,高位在前
i带符号整数
I无符号整数
l带符号长整数
L无符号长整数
n网络序短整数
N网络序长整数
p字符串指针
s带符号短整数
S无符号短整数
u转化成uuencode格式
vVAX序短整数
VVAX序长整数
x一个空字节
X回退一个字节
@以空字节(null)填充
函数名unpack
调用语法@list=unpack(packformat,formatstr);
解说unpack与pack功能相反,将以机器格式存贮的值转化成Perl中值的列表。
其格式字符与pack基本相同(即上表),不同的有:
A格式将机器格式字符串转化为Perl字符串并去掉尾部所有空格或空字符;
x为跳过一个字节;
@为跳过一些字节到指定的位置,如@4为跳过4个字节。
下面看一个@和X合同的例子:
$longrightint=unpack("
@*X4L"
$packstring);
此语句将最后四个字节看作无符号长整数进行转化。
下面看一个对uuencode文件解码的例子:
1:
#!
/usr/local/bin/perl
2:
3:
open(CODEDFILE,"
/u/janedoe/codefile"
)||
4:
die("
Can'
topeninputfile"
5:
open(OUTFILE,"
>
outfile"
6:
topenoutputfile"
7:
while($line=<
CODEDFILE>
){
8:
$decoded=unpack("
u"
$line);
9:
printOUTFILE($decoded);
10:
}
close(OUTFILE);
12:
close(CODEDFILE);
当将pack和unpack用于uuencode时,要记住,虽然它们与UNIX中的uuencode、uudecode工具算法相同,但并不提供首行和末行,如果想用uudecode对由pack的输出创建的文件进行解码,必须也把首行和末行输出(详见UNIX中uuencode帮助)。
函数名vec
调用语法retval=vec(vector,index,bits);
解说顾名思义,vec即矢量(vector)函数,它把简单变量vector的值看作多块(维)数据,每块含一定数目的位,合起来即一个矢量数据。
每次的调用访问其中一块数据,可以读取,也可以写入。
参数index就象数组下标一样,提出访问哪一块,0为第一块,依次类推,要注意的是访问次序是从右到左的,即第一块在最右边。
参数bits指定每块中的位数,可以为1,2,4,8,16或32。
例子1:
$vector=pack("
B*"
11010011"
$val1=vec($vector,0,4);
$val2=vec($vector,1,4);
print("
high-to-lowordervalues:
$val1and$val2\n"
b*"
low-to-highordervalues:
结果high-to-lowordervalues:
3and13
11and12
函数名defined
调用语法retval=defined(expr);
解说判断一个变量、数组或数组的一个元素是否已经被赋值。
expr为变量名、数组名或一个数组元素。
如果已定义,返回真,否则返回假。
函数名undef
调用语法retval=undef(expr);
解说取消变量、数组或数组元素甚至子程序的定义,回收其空间。
返回值始终为未定义值,此值与空串等效。
函数名grep
调用语法@foundlist=grep(pattern,@searchlist);
解说与同名的UNIX查找工具类似,grep函数在列表中抽取与指定模式匹配的元素,参数pattern为欲查找的模式,返回值是匹配元素的列表。
例子@list=("
This"
is"
a"
@foundlist=grep(/^[tT]/,@list);
结果@foundlist=("
函数名splice
调用语法@retval=splice(@array,slipelements,length,@newlist);
解说
拼接函数可以向列表(数组)中间插入元素、删除子列表或替换子列表。
参数skipelements是拼接前跳过的元素数目,length是被替换的元素数,newlist是将要拼接进来的列表。
当newlist的长度大于length时,后面的元素自动后移,反之则向前缩进。
因此,当length=0时,就相当于向列表中插入元素,而形如语句
splice(@array,-1,0,"
Hello"
则向数组末尾添加元素。
而当newlist为空时就相当于删除子列表,这时,如果length为空,就从第skipelements个元素后全部删除,而删除最后一个元素则为:
splice(@array,-1);
这种情况下,返回值为被删去的元素列表。
函数名shift
调用语法element=shift(@arrayvar);
解说删去数组第一个元素,剩下元素前移,返回被删去的元素。
不加参数时,缺省地对@ARGV进行操作。
函数名unshift
调用语法count=unshift(@arrayver,elements);
解说作用与shift相反,在数组arrayvar开头增加一个或多个元素,返回值为结果(列表)的长度。
等价于splice(@array,0,0,elements);
函数名push
调用语法push(@arrayvar,elements);
解说在数组末尾增加一个或多个元素。
等价于slice(@array,@array,0,elements);
函数名pop
调用语法element=pop(@arrayvar);
解说与push作用相反,删去列表最后一个元素,并将其作为返回值,当列表已空,则返回“未定义值”(即空串)。
函数名split
调用语法@list=spli
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- perl 函数 经典