第五章 列表与数组
1)
数组操作函数
sort {代码块}或函数名 @array
@a = (1,12,4,8,20);
print sort (@a);
print "\n";
print sort {$a<=>$b} (@a);
reverse @a,数组反序
chop @a 每个元素截取最后一个字符
shift(@a) 删除数组第一元素,返回删除的元素。缺省对@ARGV数组
unshift(@a,$a): 在数组开头增加元素,返回新数组长度。
push(@a,$a): 在数组末尾增加元素
pop(@a): 在数组末尾删除元素。
join('连接符',@a)把数组连接成一个字符串
@a = ('a','b') join (',',@a)='a,b';
join(',','a','b') = 'a,b';
split(/模式/,分割串,长度)
$s="a,b,c";
@a=split(/,/,$s);
@a=('a','b','c');
@a=split(/,/,$s,2);
@a=('a','b,c');
wantarry(): 当期望返回数组时为真,返回简单变量时为假
@a=mysub; $a=mysub;
splice:
@ret = splice(@a,skip,length,@newlist);
当length=0是为插入,splice(@a,-1,0,@n0在末尾追加
当newlist为空时则为删除
当length和@newlist省阅时其后的全部删除。splice(@a,3);
@found=grep(/pattern/,@search)对@search的每一个元素搜索匹配模式,匹配的元素返回到@found数组中。
map(expr,@list)对@list每个元素进行expr运算,返回运算后的数组。元素用$_代表
map($_+1,(1,2))-->(2,3)
2)二维数组
$aoa=[[1,2,3],['a','b','c']];
内含两个子数组(1,2,3),(’a','b','c');
子数组访问:@{$aoa->[0]}
子数组元素列表:@{$aoa->[0]}[0,1]
元素访问:$aoa->[0][0]
print "二维数组示例:";
$aoa=[[1,2,3],['a','b','c']];
print "$aoa->[0][0]\n";
print "@{$aoa->[0]}[0,1]\n";
print "@{$aoa->[0]}\n";
print "@$aoa\n";
@a = (1,2,3);
@b = ('a','b','c');
$aoa = [[@a],[@b]];
print "$aoa->[1][0]\n";
第六章 关联数组
1)关联数组操作函数
keys(%h) , values(%h):
keys(%h)返回键列表,values(%h)返回值列表
返回的元素无顺序。
each(%h)循环
($key,$value)=each(%hash)取出键值对。不要先keys返回键,再$hash($k)返回值
,效率不高,循环中不要增加或者删除元素,因为散列是无序的。最后返回undef。
exists关键字是否存在:exists $h{'key'}
undef(%h): 删除散列,相当于%=();
delete
2)散列数组
$aoh = [{'k11'=>'v11','k12'=>'v12'},{'k21'=>'v21','k22'=>'v22'}];
访问元素: $aoh->[0]{'k'};
访问整行: $h = $aoh->[0];%hash=%h;不能显示散列结构。
@{[%$h]}把散列改为数组显示
某键的全部名:map($_->{'k'},@$aoh)
片段:@{$aoh->[0]}{('a','b')}形成一个元素的数组
$hashref=$aoh->[0];($a,$b)=($hashref->{k1},$hashref->{k2});
#!/usr/bin/perl
$aoh = [{'k11'=>'v11','k12'=>'v12'},
{'k21'=>'v21','k22'=>'v22'}];
$hash = $aoh->[0];
print "@{[%$hash]}\n";
$hoh = {k1=>{key1=>'value1',key2=>'value2'},
k2=>{key1=>'val1',key2=>'val2'}
};
print "$hoh->{k1}{key1}\n";
print "@{$hoh->{k1}}{'key1','key2'}";
第七章 文件
1)文件描述符
文件描述符:
访问文件时用来代表的数字。
他是系统资源,系统限制打开的文件描述符的数量。
perl中只在某些系统调用时才使用它。
文件句柄:
功能同文件描述符,但与文件描述符不是一个东西。
perl使用文件句柄代表文件
文件描述符与文件句柄互相转化:
文件句柄=》文件描述符:fileopen(F);返回文件描述符。
文件描述符=》文件句柄:open(F,>&n);
2)文件变量
文件:
存放在磁盘上,永久存储数据。用于读写访问。访问前打开文件。结束后关闭。
open(HANDLE,">filename") || die $!;成功时返回非零,失败返回0。
HANDLE:文件句柄,文件变量。用来代表操作的文件。
缺省打开的句柄STDIN,STDOUT,STDERR,文件描述符为0,1,2。 不用调用open就可以直接访问。
3)错误输出函数与错误变量
open() || die "error $!";成功时不执行die,失败时执行。
die($errstr); 向STDERR输出指示错误信息的串,然后退出程序。
warn($errstr); 向STDERR输出信息,不退出程序。
$!最后一次错误的信息。与die,warn结合使用。
die($str)中$str中最后不是\n时,输出自动添加at程序名line行号。如die("can't open");输出
can't open at myprog line 13.加上\n"can't open\n"时没有添加的信息。
4)文件缓冲
close(F)
设置$|变量决定是否有文件缓冲,$|=1代表无缓冲。但只对当前输出文件有效。如STDOUT,
设置另外文件要先用select(F).
select(F)设置当前文件,返回原文件句柄。设置完再select(OLD)返回原文件。
缓冲 无缓冲
打开: open,sysopen sysopen
关闭: close
读: <>,readline sysread
写: print syswrite
定位: tell,seek sysseek
5)读文件
$line=读一行到line,指针后移一行。缺省读到$_中。
$/='\n',为行分隔符,遇到他则为一行结束,行包含$/。
可用chomp($s)去除此标志,行结尾不含$/则不去除字符。
可设置$/为其他字符串,遇到$/为行结束,chomp去除此字符串。
6)文件权限
chmod(mode,filelst); mode=4位8进制数,
chown(userid,groupid,filelst)
umask(maskval):返回原mask。unix中的umask值设置。
文件指针:
tell(F)当前位置。
seek(F,distance,pos);定位到指定位置。
F为文件句柄,pos=0相对文件头,1相对当前位置,2相对文件尾。distance相对pos表示的位置多少字节。
#!/usr/bin/perl
open (F,"+
print "\n";
$a = ;
print "line 1=$a";
print "\n";
print tell(F);
print "\n";
print F "a".$/;
seek(F,3,0);
$a = ;
print F "a".$/;
close(F);
7)文件状态
stat(file) 返回文件状态的列表。
utime(acctime,modtime,filelist)修改时间戳,修改访问时间,返回成功修改的文件数。
8)文件操作
glob
@a = glob("*.txt")返回与模式匹配的所有文件目录。
truncate(file,length)
rename(old,new);
9)文件链接
link(文件名,链接名)
synlink符号链接(文件名,链接名)
readlink(linkname)
unlink(filelist)
10)目录操作
opendir(dirvar,dirname):打开目录
closedir(dir) : 关闭目录
readdir(dir):对数组返回所有文件和目录,
chdir(dir): 改变目录
telldir(dir): 当前目录位置
seekdir(dir,loc): 到指定位置
rewinddir(dir):目录位置指定目录第一项
mkdir(dirname,perission): 创建目录(当前目录,访问权限)
rmdir(dirname): 只能删除空目录,
第七章 文件
阅读(823) | 评论(0) | 转发(0) |