文件和目录:
-X FILEHANDLE/EXPR/DIRHANDLE
文件测试:
-f fiel 指定file是否为常规文件
-d file 文件存在并且是目录
-b file 文件存在且是块设备
-c file 文件存在且是字符设备
-p file 文件存在并且是管道
-S file 文件存在并且是socket
-u file 文件设置了setuid位
-g file 文件设置了setgid位
-k file 文件设置了粘滞位
-t file 文件句柄是tty设备
-T file 看起来像文本文件
-B file 看起来像二进制文件
-M file 最有一次修改后至今的天数
-A file 最后一次访问后至今的天数
-C file 最后一次文件节点变更至今的天数
多个测试:
and 用来测试多个条件与
or 用来测试多个条件或
_ 特殊字符表示虚拟文件句柄,告诉perl使用上次查询过的文件信息来做当前的测试。
if (-r $file and -w _) {
print “the file is both readable andwritable!\n”;
}
栈式文件测试:
适用于使用返回值为真假的情况。
返回数值的不要使用。
use 5.010
if (-w -r $file) {
print “the file is both readable andwritable!\n”;
}
文件句柄:
Perl保留的六个文件句柄:
STDIN\STDOUT\STDERR
DATA\ARGV\ARGVOUT
open函数:打开句柄
文件句柄使用大写表示。
open FH,”filename”; #创建文件句柄
open FH,“< filename”;/open FH,“<”,“filename”; #创建输入文件句柄
open FH,“> filename”;/open FH,“>”,“filename”; #创建输出文件句柄
open FH,“>> filename”;/open FH,“>>”,“filename”; #创建输出文件的追加句柄
处理打开句柄出错:
my $res = open FH,“>> filename”;
if (! $res) {
print “open @R_301_159@\n”;
}
open FH,“filename”
or die “cat not open file :$ ! ”;
<FH>使用文件句柄:
<FH>表示行输入操作符,每次读取一行。
While (<FH>) {
…
}
printf FH …; #不用括号也可以
printf FH (…); #文件句柄在括号外也可以
printf (FH …); #文件句柄在括号内也可以
statFILEHANDLE/EXPR/DIRHANDLE:
返回包含13个数字元素的列表:
my($dev-设备编号,$ino-inode编号,$mode-文件权限位集合,$nlink-硬链接数,$uid,$gid,$rdev,$size-文件字节数,$atime,$mtime,$ctime,$blksize,$blocks) = stat($filename);
$n = (stat($filename))[N];
lstat EXPR/FILEHANDLE/DIRHANDLE:
和stat一样,但是用于符号链接,返回符号链接本身的信息,符号链接使用stat返回的是源文件的信息.
chdir EXPR/FILEHANDLE/DIRHANDLE:
默认切换到$HOME。
glob EXPR:
进行模糊匹配,支持*,多个用空格隔开。
my @files = glob “*”;
perl name.pl *.ext #命令行通配,shell会匹配*.ext然后传给perl程序。
my @files = <*>; #使用<>进行通配,和glob一样。
unlink LIST:
unlink glob “*.bak”;
rename OLDNAME,NEWNAME:
link OLDFILE,NEWFILE
创建硬连接
symlink OLDFILE,NEWFILE
创建软连接
readlink EXPR
返回符号链接指向的位置
mkdir FILENAME,[MASK]
创建目录
mkdir $FILENAME,0755; #使用八进制
mkdir $FILENAME, oct($PERM);
rmdir FILENAME
删除空目录,如果是非空目录,需要先用unlink清空再删除。
opendir
readdir
telldir
rewinddir
seekdir
closedir
chmod LIST:
更改文件或目录权限
chmod 0755,$FILENAME1,$FILENAME2,…;
chomd oct($MODE);
chown LIST:
更改文件或目录属主和属组
chown $uid,$filename,…;
chroot
umask
utime
fcntl
ioctl