catfile($dirname,$filename);print "filename is $filename\n";print "dirname is $dirname\n";print "newname is $new_name\n";文件操作文件测试操作符-r  文件或者目录对当前用户或组来说是可读的-w  文件或者目录对当前用户或组来说是可写的-x  文件或者目录对当前用户或组来说是可执行的-o  文件或目录由当前用户拥有-R  文件或者目录对实际的用户或者组是可读的-W  文件或者目录对实际的用户或者组是可写的-X  文件或者目录对实际的用户或者组是可执行的-O  文件或者目录由实际的用户拥有-e  文件或者目录是存在的-z  文件存在且没有内容(对目录来说永远为假)-s  文件或者目录存在而且有内容(返回值是以字节为单位的文件大小)-f  是普通文件-d  是目录-l  是符号链接-S  是socket类型的文件-p  是命名管道,也就是先入先出(fifo)队列-b  是块设备文件(比如某个可挂载的磁盘)-c  是字符设备文件(比如某个I/O设备)-u  文件或者目录设置了setuid位-g  文件或者目录设置了setgid位-k  文件或者目录设置了sticky位-t  文件句柄是TTY设备-T  看起来像文本文件-B  看起来像二进制文件-M  最后一次被修改后至今的天数-A  最后一次被访问后至今的天数-C    最后一次文件节点编号(inode)被变更后至今的天数测试统一文件的多项属性if (-r $file and -w $file){.....}可以改写成如下语句,以提高性能if (-r $file and -w _){.....}_符号表示虚拟文件句柄,它会告诉perl用上次查询过的文件来做当前测试。stat和lstat函数stat函数返回一个有13个元素组成的列表。dev     0   文件所在的设备编号ino     1        文件的inode标号mode    2   文件模式(权限、类型)nlink   3   文件或者目录的连接数uid     4   文件的用户IDgid     5   文件的组IDrdev    6   设备识别码(只用于特殊文件)size    7   文件总的自己数atime   8   文件最后访问时间mtime   9   文件最后更改时间ctime   10  inode更改的时间blksize 11  文件系统I/O首选块的大小blocks 12   实际分配的文件块数localtime函数($sec,$min,$hour,$mday,$mon,$year_off,$wday,$yday,$isdat) = localtime;$sec             秒,0 ~ 59$min           分,0 ~ 59$hour            时,0 ~ 23$mday            月份中的日期, 1 ~ 2 8、2 9、3 0或3 1$mon            年份中的月份, 0 ~ 11(这里请特别要小心)$year_off   1900年以来的年份。将1900加上这个数字,得出正确的4位数年份$wday            星期几,0 ~ 6$yday            一年中的第几天,0 ~ 364或365$isdst        如果夏令时有效,则为真perl目录操作chdir改变工作目录chdir '/etc' or die "can't chdir to /etc: $!\n";在程序内部使用通配符匹配文件my @files=glob '.* *'; #匹配多个模式需要用空格隔开,也可以采用my @files=;的方式print "@files\n";opendir 打开目录readdir 读取目录下的文件名closedir 关闭打卡的目录句柄测试代码:use File::Spec::Functions;my $dir='/etc';opendir DIR,$dir or die "can't open /etc directory: $!\n";foreach my $file (readdir DIR){        if ($file=~/^\./){                next;        }        $file=catfile($dir,$file);        print "we found $file in /etc directory\n";}closedir DIR;unlink删除文件,返回成功删除文件的数目,unlink不能用来删除目录rename重命名文件测试代码:for my $file (glob '*.old'){        my $new_file=$file;        $new_file=~s/old/new/;        if (-z $new_file){                print "$new_file is exists ,please check it out\n";        }else{                rename $file,$new_file or warn "rename $file faild,please check it out\n";                print "rename $file success ,don't worry\n";        }}创建和删除目录mkdir 创建目录my $dir='aaa';my $permissions="0755";mkdir 'aaa',oct($permissions) or die "can't create directory aaa: $!\n";rmdir删除目录,每次只能删除一个目录,而且删除时目录必须为空,不然会导致失败!chmod修改文件或者目录权限chmod 0755,'test';chown修改文件或者目录的属主或者属组,返回受影响的文件数量测试代码:my $user=52;my $group=52;chown $user,$group,'bbb';defined(my $user1=getpwnam 'puppet') or die "bad user: $!\n";defined(my $group1=getpwnam 'puppet') or die 'bad group: $!\n';chown $user1,$group1,'bbb.new';utime修改文件的时间戳(最近的更改和访问时间)测试代码:my $now=time;my $ago=$now-24*60*60;utime $now,$ago,'bbb';字符串和排序用index查找子字符串my $string='hah aaa bbbcc aa ddd';my $part=index($string,'aa');print "$part\n";排序按照数字排序;按照字符排序cmp;my @some_numbers=qw{1 10 23 100 34 45};my @some_chars=qw{aa cc bb dd dc bc};sub by_number{        $a$b;}sub by_char{        $a cmp $b;}my @test=sort by_number @some_numbers;my @test2=sort by_char @some_chars;print "@test\n";print "@test2\n";sub sort_test{    substr($test1{$a},2,6) substr($test1{$b},2,6)    or substr($test1{$a},0,1) cmp substr($test1{$b},0,1)}执行外部命令IPC::System::Simplesystem systemxcapture capturex错误扑捉:evalmy $aaa1=$ARGV[0];my $aaa2=$ARGV[1];my $test=eval{$aaa1/$aaa2} || 'aaa';print "I couldn't divide by \$aaa2: $@" if $@;print "$test";有4中类型的错误eval捕捉不到:1、代码语法错误2、perl解析器本省的崩溃错误3、告警类错误4、每次调用exit的时候
10-25 00:32
查看更多