一.打开文件:
语法为open (filevar, filename),其中filevar为文件句柄,或者说是程序中用来代表某文件的代号,filename为文件名,其路径可为相对路径,亦可为绝对路径。
open(FILE1,"file1");open(FILE1,"/u/jqpublic/file1");
打开文件时必须决定访问模式,在PERL中有三种访问模式: 读、写和添加。后两种模式的区别在于写模式将原文件覆盖,原有内容丢失,形式为: open(outfile,">outfile");而添加模式则在原文件的末尾处继续添加内容, 形式为:open(appendfile,">>appendfile")。要注意的是,不能对文件同时进行读和写/添加操作。
open的返回值用来确定打开文件的操作是否成功,当其成功时返回非零值,失败时返回零,因此可以如下判断:
if (open(MYFILE, "myfile")) {
# here's what to do if the file openedsuccessfully
}
当文件打开失败时结束程序:
unless (open (MYFILE, "file1")){
die ("cannot open input filefile1\n");
}
亦可用逻辑或操作符表示如下:
open (MYFILE, "file1") || die("Could not open file");
二.写入文件
open(OUTFILE, ">outfile");
print OUTFILE ("Here is an outputline.\n");
注:STDOUT、STDERR为标准输出和标准错误文件,通常为屏幕,且不需要打开。
三.文件是否存在
if (-e "/path/file1") {
print STDERR ("File file1exists.\n");
}
四.perl中命令行参数的使用
象C一样,PERL也有存储命令行参数的数组@ARGV,可以用来分别处理各个命令行参数;与C不同的是,$ARGV[0]是第一个参数,而不是程序名本身。
$var = $ARGV[0]; # 第一个参数
$numargs = @ARGV; # 参数的个数
PERL中,<>操作符实际上是对数组@ARGV的隐含的引用,其工作原理为:
1、当PERL解释器第一次看到<>时,打开以$ARGV[0]为文件名的文件;
2、执行动作shift(@ARGV); 即把数组@ARGV的元素向前移动一个,其元素数量即减少了一个。
3、<>操作符读取在第一步打开的文件中的所有行。
4、读完后,解释器回到第一步重复。
例:
@ARGV = ("myfile1","myfile2"); #实际上由命令行参数赋值
while ($line = <>) {
print ($line);
}
将把文件myfile1和myfile2的内容打印出来。
操作符 | 描述 |
-b | 是否为块设备 |
-c | 是否为字符设备 |
-d | 是否为目录 |
-e | 是否存在 |
-f | 是否为普通文件 |
-g | 是否设置了setgid位 |
-k | 是否设置了sticky位 |
-l | 是否为符号链接 |
-o | 是否拥有该文件 |
-p | 是否为管道 |
-r | 是否可读 |
-s | 是否非空 |
-t | 是否表示终端 |
-u | 是否设置了setuid位 |
-w | 是否可写 |
-x | 是否可执行 |
-z | 是否为空文件 |
-A | 距上次访问多长时间 |
-B | 是否为二进制文件 |
-C | 距上次访问文件的inode多长时间 |
-M | 距上次修改多长时间 |
-O | 是否只为“真正的用户”所拥有 |
-R | 是否只有“真正的用户”可读 |
-S | 是否为socket |
-T | 是否为文本文件 |
-W | 是否只有"真正的用户"可写 |
-X | 是否只有"真正的用户"可执行 |
五.目录函数
1.mkdir
mkdir(dirname,permissions);
2.chdir
chdir(dirname);
3.opendir(dirvar,dirname)
dirvar:目录变量
dirname:目录名
4.closedir(dirname)
关闭目录
5.rename(oldname,newname)
重命名
6.unlink(filelist)
删除文件,这里其实是删除的文件链接
7.创建链接
link(newlink,file)
创建一个file的软链接,删除一个文件的链接后还可以删除另一个
8.chmod(permissions,filelists)
改变文件权限
9.stat(file)
获取文件状态。参数file可为文件名也可为文件变量。返回列表元素依次为:
- 文件所在设备
- 内部参考号(inode)
- 访问权限
- 硬链接数
- 属主的(数字)ID
- 所属组的(数字)ID
- 设备类型(如果file是设备的话)
- 文件大小(字节数)
- 最后访问时间
- 最后修改时间最后改变状态时间
- I/O操作最佳块大小
- 分配给该文件的块数
10.chmop命令:
如果字符串结尾有换行符,chomp 可以去掉它。这基本上就是它能完成的所有功能,如下例:
$text = “a line of text/n”; #也可以由<STDIN>输入
chomp($text); #去掉换行符(/n)。
它非常有用,基本上你的每一个程序都会用到它。如你将知道,这是将字符串末尾换行符去掉的最好方法。基于Perl 中的一条基本原则:在需要使用变量的地方,可以使用赋值表达式来代替。我们有更简单的使用chomp 的方法。Perl 首先做赋值运算,再使用这个变量。因此使用chomp 的最常用方法是:
chomp ($text = <STDIN>); #读入,但不含换行符
$text = <STDIN>;
chomp ($text); #同上,但用两步完成
第一眼见到时,第一种组合的方法看起来复杂些。如果把上述其看成两步操作,读一行再chomp,那写成两个语句的方法
看起来自然些。如果将其看作一个操作,读入一行但不包括换行符,那写成一个语句的方法更恰当。由于绝大多数Perl 程序员使用第一种写法,你也应该使用它。