perl 函数集(二)

perl 函数集(二)


四、标量转换函数
五、数组和列表函数
六、关联数组函数


四、标量转换函数

函数名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" x 2, "test1", "test2");
   格式@的情况比较特殊,其后必须加个整数,该数表示字符串必须的长度,如果长度不够,则用空字符(null)补足,如:
   $output = pack ("a @6 a", "test", "test2");
   pack函数最常见的用途是创建可与C程序交互的数据,例如C语言中字符串均以空字符(null)结尾,创建这样的数据可以这样做:
   $Cstring = pack ("ax", $mystring);
   下表是一些格式字符与C中数据类型的等价关系:
字符 等价C数据类型
Cchar
ddouble
ffloat
iint
Iunsigned int (or unsigned)
llong
Lunsigned long
sshort
Sunsigned short
   完整的格式字符见下表。

格式字符 描述
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 ("@* X4 L", $packstring);
   此语句将最后四个字节看作无符号长整数进行转化。下面看一个对uuencode文件解码的例子:
1 : #!/usr/local/bin/perl
2 :
3 : open (CODEDFILE, "/u/janedoe/codefile") ||
4 : die ("Can't open input file");
5 : open (OUTFILE, ">outfile") ||
6 : die ("Can't open output file");
7 : while ($line = <CODEDFILE>) {
8 : $decoded = unpack("u", $line);
9 : print OUTFILE ($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-low order values: $val1 and $val2/n");
7 : $vector = pack ("b*", "11010011");
8 : $val1 = vec ($vector, 0, 4);
9 : $val2 = vec ($vector, 1, 4);
10: print ("low-to-high order values: $val1 and $val2/n");
结果high-to-low order values: 3 and 13
low-to-high order values: 11 and 12

函数名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是可选项,当指定它时,达到该长度就不再分割。

函数名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 : sub mysub {
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});
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值