zl程序教程

您现在的位置是:首页 >  其他

当前栏目

perl几个文件操作例子

文件 操作 例子 几个 Perl
2023-06-13 09:15:28 时间

perl用的最多的地方就算是文件处理了,下面我就总结了一下perl文件操作的一些东西,并且有具体的例子,通过下面的例子,加强我们对perl文件操作的理解。

删除文件

使用unlinke函数,比如unlink$file,unlink$file1,$file2,$file3

打开文件

使用三参数的形式打开文件,这样非常便于区分模式和文件名,perl5.6之后的版本都支持这种方式。

复制代码代码如下:

#Openthe"txt"fileforreading
openFH,"<","$file_name.txt"ordie"Error:$!n";#Openthe"txt"fileforwriting.Createsthe#file_nameifitdoesn"talreadyexist#andwilldelete/overwriteapre-existingfileofthesamenameopenFH,">","$file_name.txt"ordie"Error:$!n";
#Openthe"txt"fileforappending.Createsthe#file_nameifitdoesn"talreadyexist
openFH,">>","$file_name.txt"ordie"Error:$!n";
#Openthe"txt"filefora"read/write".#Willnotcreatethefileifitdoesn"t#alreadyexistandwillnotdelete/overwrite#apre-existingfileofthesamename
openFH,"+<","$file_name.txt"ordie"Error:$!n";#Openthe"txt"filefora"read/write".Willcreate#thefileifitdoesn"talreadyexistandwill#delete/overwriteapre-existingfile#ofthesamenameopenFH,"+>","$file_name.txt"ordie"Error:$!n";
#Openthe"txt"filefora"read/append".Willcreate#thefileifitdoesn"talreadyexistandwill#notdelete/overwriteapre-existingfile#ofthesamename
openFH,"+>>","$file_name.txt"ordie"Error:$!n";

一次性读入整个文件

使用<>在标量环境下一次读入一行,而在列表环境下一次读入所有行,$/存储的是行分隔符,默认是换行符,我们先将$/改掉,这样就可以在标量环境下一次读入所有行了(这时已经没有行的概念了,就是读入整个文件),你也可以用列表读入所有行然后再将所有行拼到一起,但那样速度很慢。用完记得将$/改回来。

复制代码代码如下:

#!/usr/bin/perl
usestrict;
usewarnings;
subtest{
   openFILE,"<","d:/code/test.txt"ordie$!;
   my$olds=$/;
   $/=undef;
   my$slurp= ;
   print$slurp,"n";
   $/=$olds;
   closeFILE;
}
&test();

也可以使用local关键字来将$/设置为局部变量,这样跳出作用域后,$/又恢复了原来的值。
复制代码代码如下:
#!/usr/bin/perl
usestrict;
usewarnings;
subtest{
   local$/;#???local$/=undef;
   openFILE,"<","d:/code/zdd.txt"ordie$!;
   my$slurp= ;
   print$slurp,"n";
}
&test();
最好的方法是使用模块,这样比自己写安全,File::Slurp、IO::All都可以的。

打开文件请用双引号

open文件时,如果文件名有变量替换,最好用双引号而不是单引号,因为单引号无视变量内插。

复制代码代码如下:
openFILE"<$file"ordie$!;#这样可以。
openFILE"<$file"ordie$!;#这样就不可以,因为$file不会被解释成变量内插。同样<也不会被解释成输入

文件句柄作参数

假设有一个函数test,它有一个参数,是某个文件句柄,那么该如何传递这个参数呢?

方法一,传递参数时,在句柄前面加*

复制代码代码如下:
submain{
   openFILE,"+<","test.data"ordie$!;
   &test(*FILE);
   closeFILE;
}
方法二,使用openmy$FILE的形式打开文件
复制代码代码如下:
submain{
   openmy$FILE,"+<","test.data"ordie$!;
   &test($FILE);
   close$FILE;
}