open(HANDLE1, "<./test.txt") or die("can't open file: $!");
while(<HANDLE1>)#通过钻石操作符来读取文件的每一行
chomp;
say($_);#打印文件的每一行
close(HANDLE1);
#对于小文件,也可以通过数组来一次性接收所有文件而不需要使用循环,如下:
my @arr = <HANDLE1>;
#也可以在while 循环体中继续读取文件,如下:
while(<HANDLE1>)#遍历奇数行1 3 5...
chomp;
say($_);#打印文件的每一行
my $line = <HANDLE1>;#读取偶数行2 4 6...
从特殊文件句柄,如<STDIN>、<>、<ARGV>读取数据时,由于它们是预定义好的,所以不需要open;
写入文件,需要用到 输出函数 say/print/printf ,当写入多行内容时可以使用 heredoc;
写入文件使用输出函数时,在这几个函数后加上文件句柄表示将输出语句写入到文件句柄中,如果不加文件句柄则默认的句柄为 STDOUT,也就是输出到显示器;写入文件的一般格式如下:
open(HANDLE1, ">>./test.txt") or die("can't open file: $!");
say(HANDLE1 "hello perl");
print(HANDLE1 "hello python");
say(HANDLE1 <<EOF
hi this is a heredoc
close(HANDLE1);
注意,在用 say 写入时默认会写入换行符,而print 写入时不会写入换行符,这与二者的输出格式是一致的;此外,上面的写入方式都会在原文件的基础上另起一行写入!!
文件在读写完成后,需要关闭,这需要用到 close 函数,格式如下:
close(FILEHANDLE);
操作文件指针
perl在操作文件指针时,可以用 seek 函数移动文件指针,格式如下:
seek (filevar, distance, relative_to);
seek可以改变文件指针的位置,有三个参数:
1)filevar 文件句柄
2)distance 移动的字节数,正数向前移动,负数往回移动
3)relative_to 可以为0/1/2 0表示相对于文件头移动,1表示相对于当前位置移动,2表示相对于文件末尾移动
seek 函数有返回值,移动成功返回真,否则返回假;seek 一般和 tell一起使用,tell用来返回当前文件指针的位置,格式如下:
tell(filevar);
tell 的返回值为从文件头到当前位置的距离,单位为字节;
perl 文件操作符
perl 语言提供了很多对于判断文件属性的操作符, 笔者只列出个人常用的一些文件操作符. 文件属性判断操作符通常与if 配合使用;
1)判断文件权限
测试操作符 | 含义 |
---|
-r | 当前用户对此文件是否拥有可读权限 |
-w | 当前用户对此文件是否拥有可写权限 |
-x | 当前用户对此文件是否拥有可执行权限 |
-o | 此文件所有者是否是当前用户 |
2)判断文件类型
测试操作符 | 含义 |
---|
-f | 文件是否是普通文件 |
-d | 文件是否是目录文件 |
-l | 文件是否是链接文件 |
3)判断文件存在
测试操作符 | 含义 |
---|
-e | 文件或目录存在 |
-z | 判断文件内容为空,不能用于判断目录 |
-s | 判断文件或目录存在, 返回文件或目录的大小, 单位为字节 |
文件操作符组合
通常我们可能会对同一个文件的多个属性进行判断, 那么就需要组合文件操作符;
1)逻辑表达式组合
如下例子:
if ( -f $file and -x _ )
print “文件$file 存在且可执行\n”;
2)栈式组合
栈操作符只能表示逻辑与关系, 使用起来很方便, 代码写起来会更精简:
if( -f -x $file){
print "文件$file 存在且可执行\n";
glob函数
glob()函数用于打印作为参数传递给它的目录中存在的文件,语法如下:
glob(Directory_name/File_type)
参数:要打印文件的目录的路径
返回值:给定目录中存在的文件列表
看下面例子:
@files = glob('C:/Users/GeeksForGeeks/Folder/*'); #打印 Forder 目录下的所有文件
# Printing the created array
print "@files\n";
@Array = glob('C:/Users/GeeksForGeeks/Folder/*.txt'); #打印 Forder 目录下所有以 txt 结尾的文件
print "@files\n";
open (filevar, filename)
filevar为文件句柄,或者说是程序中用来代表某文件的代号
filename为文件名,其路径可为相对路径,亦可为绝对路径
open(FILE1,"file1");
open(FILE1,...
perl 程序通过文件句柄对文件进行文件读写
文件句柄相当于一个指针, 指向这个文件;
定义文件句柄有两种方式: 一种是会名称全部时大写, 另一种时是定位为标量, 笔者建议句柄使用标量, 因为perl默认的文件句柄为全部大写.
perl 内置句柄有: STDIN, STDOUT, S...
虽然Perl 语言对目录的常见操作也提供了一组API, 如rename, rmdir, unlink 等函, 但是笔者认为并没有太大必要去花时间掌握这些函数, 因为perl 通过system 函数可以直接执行系统命令, 所以直接使用system+原生linux文件操作命令即可, 这样可以少学一套API. 因此, 笔者更常用于此种方式.
1. 获取目录下文件列表
Perl 语言获取文件列表是通过砖石...
在Perl中可以用open或者sysopen函数来打开文件进行操作,这两个函数都需要通过一个文件句柄(即文件指针)来对文件进行读写定位等操作。
下面以open函数为例:
1:读:open(文件句柄,"文件名")/open(文件句柄,"文件名"),前提文件必须已经存在,否则会返回0,出错信息在$!中。
2:写:open(文件句柄,">文件名"),文件如果不存在,那么创建之,如果存在,内容被清空