perl学习笔记函数.docx
《perl学习笔记函数.docx》由会员分享,可在线阅读,更多相关《perl学习笔记函数.docx(12页珍藏版)》请在冰豆网上搜索。
perl学习笔记函数
1.指令:
print
语法:
printFilehandleLIST
说明:
这个Filehandle可以看作在I(INPUT)/O(OUTPUT)之间的一个桥梁,可以利用FILEHANDLE来做出数据读入写出的动作.STDIN是代表从哪连输入数据,例如从电脑的键盘输入;STDOUT是代表从哪连输出数据;例如从电脑的屏幕输出;STDERR是代表从哪连输出错误的数据,例如从电脑的屏幕输出.而在Perl语言中有三个标准FILEHANDLE:
1.STDIN(标准输入):
是代表STDIN的FILEHANDLE
2.STDOUT(标准输出):
是代表STDOUT的FILEHANDLE
3.STDERR(标准错误输出):
是代表STDERR的FILEHANDLE如果要使用其他FILEHANDLE的时候,就要用OPEN这个函数来打开一个FILEHANDLE,我们可以用PRINT这个函数LIST的数据输出给FILEHANDLE.
4.指令:
die
语法:
dieLIST
说明:
会把LIST字符串显示出来,并退出程序。
常常和$!
这个代表错误信息变量一起使用。
示例:
open(FILE,"$filename")||die"不能打开文件$!
;如果打开文件失败的话,就会显示出错误的信息,之后再退出程序。
数学函数
函数名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之间的一个浮点数。
$int=int(rand(10));#$int的值是一个整数,且值在0和9之间
函数名srand
调用语法srand(value);
解说初始化随机数生成器。
保证每次调用rand真正随机。
字符串处理函数
函数名index
调用语法position=index(string,substring,position);
解说返回子串substring在字符串string中的位置,如果不存在则返回-1。
参数position是可选项,表示匹配之前跳过的字符数,或者说从该位置开始匹配。
$s=index("perl5","p");#这时$s=0
$s=index("perl5","l",2);#这时$s=3
$s=index("perl5","perl");#这时$s=-1
函数名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必须为变量或数组元素,此时其中部分子串被等式右边的值替换。
$s=substr("perl5",2,2);#这时$s="rl";
$s=substr("perl5",2);#这时$s="rl5";
$s=substr("perl5",-2,2);#这时$s="er";
函数名study
调用语法study(scalar);
解说用一种内部格式提高变量的访问速度,同一时刻只对一个变量起作用。
函数名lcuc
调用语法retval=lc(string);
retval=uc(string);
解说将字符串全部转换成小/大写字母。
函数名lcfirstucfirst
调用语法retval=lcfirst(string);
retval=ucfirst(string);
解说将第一个字母转换成小/大写。
函数名quotameta
调用语法newstring=quotemeta(oldstring);
解说将非单词的字母前面加上反斜线(\)。
语句:
$string=quotemeta($string);
等效于:
$string=~s/(\W)/\\$1/g;
常用于模式匹配操作中,确保字符串中没有字符被看作匹配操作符。
函数名join
调用语法join(joinstr,list);
解说把字符串列表(数组)组合成一个长的字符串,在每两个列表元素间插入串joinstr。
@array=("one","two","three");
$total=join(":
",@array);这时$total="one:
two:
three";
函数名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。
示例:
$url="
chop($url);这时$url="而这两行也可以写成chop($url="
函数名chomp
调用语法result=chomp(var);
解说检查字符串或字符串列表中元素的最后一个字符是否为由系统变量$/定义的行分隔符,如果是就删除。
返回值为实际删除的字符个数。
函数名crypt
调用语法result=crypt(original,salt);
解说用DES算法加密字符串,original是将要加密的字符串,salt是两个字符的字符串,定义如何改变DES算法,以使更难解码。
返回值为加密后的串。
函数名hex
调用语法decnum=hex(hexnum);
解说将十六进制数(字符串形式)转化为十进制数。
示例:
$decimal=hex("ff");这时$decimal=255;
函数名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","test2");
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:
die("Can'topenoutputfile");
7:
while($line=){
8:
$decoded=unpack("u",$line);
9:
printOUTFILE($decoded);
10:
}
11:
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:
#!
/usr/local/bin/perl
2:
3:
$vector=pack("B*","11010011");
4:
$val1=vec($vector,0,4);
5:
$val2=vec($vector,1,4);
6:
print("high-to-lowordervalues:
$val1and$val2\n");
7:
$vector=pack("b*","11010011");
8:
$val1=vec($vector,0,4);
9:
$val2=vec($vector,1,4);
10:
print("low-to-highordervalues:
$val1and$val2\n");
结果high-to-lowordervalues:
3and13
low-to-highordervalues:
11and12
函数名defined
调用语法retval=defined(expr);
解说判断一个变量、数组或数组的一个元素是否已经被赋值。
expr为变量名、数组名或一个数组元素。
如果已定义,返回真,否则返回假。
函数名undef
调用语法retval=undef(expr);
解说取消变量、数组或数组元素甚至子程序的定义,回收其空间。
返回值始终为未定义值,此值与空串等效。
数组和列表函数
函数名grep
调用语法@foundlist=grep(pattern,@searchlist);
解说与同名的UNIX查找工具类似,grep函数在列表中抽取与指定模式匹配的元素,参数pattern为欲查找的模式,返回值是匹配元素的列表。
例子@list=("This","is","a","test");
@foundlist=grep(/^[tT]/,@list);
结果@foundlist=("This","test");
函数名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=split(pattern,string,maxlength);
解说将字符串分割成一组元素的列表。
每匹配一次pattern,就开始一个新元素,但pattern本身不包含在元素中。
maxlength是可选项,当指定它时,达到该长度就不再分割。
$text="Michael,Gevin,Mike";@name=split(/,/,$text);#这时@name=("Michael","Gevin","Mike");
($a,$b,$c)=split(/,/,$text);#这时$a="Michael";$b="Gevin";$c="Mike";
@name=split(/,/,$string,2);#这时@name=("Michael","Gevin");
函数名sort
调用语法@sorted=sort(@list);
解说按字母次序给列表排序。
函数名reverse
调用语法@reversed=reverse(@list);
解说按字母反序给列表排序。
函数名map
调用语法@resultlist=map(expr,@list);
解说此函数在Perl5中定义,可以把列表中的各个元素作为表达式expr的操作数进行运算,其本身不改变,结果作为返回值。
在表达式expr中,系统变量$_代表各个元素。
例子1、@list=(100,200,300);
@results=map($_+1,@list);
2、@results=map(&mysub($_),@list);
结果1、(101,201,301)
2、无
函数名wantarray
调用语法result=wantarray();
解说Perl中,一些内置函数的行为根据其处理简单变量还是数组有所不同,如chop。
自定义的子程序也可以定义这样两种行为。
当子程序被期望返回列表时,此函数返回值为非零值(真),否则为零值(假)。
例子1:
#!
/usr/local/bin/perl
2:
3:
@array=&mysub();
4:
$scalar=&mysub();
5:
6:
submysub{
7:
if(wantarray()){
8:
print("true\n");
9:
}else{
10:
print("false\n");
11:
}
12:
}
结果$program
true
false
$
关联数组函数
函数名keys
调用语法@list=keys(%assoc_array);
解说返回关联数组无序的下标列表。
函数名values
调用语法@list=values(%assoc_array);
解说返回关联数组无序的值列表。
函数名each
调用语法@pair=each(%assoc_array);
解说返回两个元素的列表--键值对(即下标和相应的值),同样无序。
当关联数组已空,则返回空列表。
函数名delete
调用语法element=delete(assoc_array_item);
解说删除关联数组中的元素,并将其值作为返回值。
例子%array=("foo",26,"bar",17");
$retval=delete($array{"foo"});
结果$retval=26;
函数名exists
调用语法result=exists(element);
解说在Perl5中定义,判断关联数组中是否存在某元素,若存在,返回非零值(真),否则返回零值(假)。
例子$result=exists($myarray{$mykey});