Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31097
  • 博文数量: 11
  • 博客积分: 265
  • 博客等级: 入伍新兵
  • 技术积分: 105
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-26 00:54
文章分类

全部博文(11)

文章存档

2011年(11)

我的朋友

分类: Python/Ruby

2011-10-20 09:54:02

第五章 列表与数组

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): 只能删除空目录,









第七章 文件
阅读(812) | 评论(0) | 转发(0) |
0

上一篇:solaris安装

下一篇:perl用法

给主人留下些什么吧!~~