2.1 识别文件或目录

文件在Perl程序中的表示与在操作系统中的一样,类似“/home/joy/a.txt”“../b.txt”和“c.txt”等这样的字符串。文件名之前可以有绝对路径或者相对路径,如果没有路径,则默认是当前(运行Perl程序的)路径。

在处理文件之前,我们需要先识别文件。Perl提供了一些文件(包括目录)测试操作符,它们中的大部分会返回“真”或“假”。例如:

my $to_check = "/tmp/a";
if ( -e $to_check ) {
  print "file or directory $to_check exists.\n";
}
else {
  print "file or directory $to_check does not exist.\n";
}

-e测试操作符的含义是:如果文件或目录是存在的,那么该测试返回“真”,否则返回“假”。

常用的文件测试操作符,如表2-1所示。

表2-1 文件测试操作符

000

请注意,-f返回真时,测试对象可能是普通文件,也可能是指向其他文件的符号链接。如果想要确保被测试的对象只是普通文件,而不是符号链接,则需要使用:

if ( -f $file and ! -l $file ) {
  print "$file is file, not link\n";
}

还有一个常用的测试操作符-s。如果被测对象是普通文件,它会返回文件的大小,以字节(byte)为单位。这常用于我们挑选某类大小的文件,或者累计文件的大小。

if ( -s $file > 500,000,000 ) {
  print "$file is larger than 500M\n";
}