由于公司需要,本人最近在学习Perl这种脚本语言,本文是我在学习Perl的过程中总结出来的一些心得和笔记,希望能够帮助也在学习Perl的各位同僚。废话不多说直接上干货!!!
——————————————————————————— 干货分割线 —————————————————————————
打开文件:
若要在P e r l中读取文件或写文件,必须打开一个文件句柄。P e r l中的文件句柄实际上是另一种类型的变量,它们可以作为在你的程序与操作系统之间对某个特定文件使用的非常方便的一个引用(即句柄)。句柄包含了关于如何打开文件和你在文件中读(或写)到了什么位置等信息。它们还包含了用户定义的关于如何读写文件的属性。句柄必须使用大写字母,以防与其他关键字冲突。
打开文件句柄:open(句柄,文件路径)。若路径不是完整路径,则打开当前目录中的文件。Open函数运行成功返回非0值,失败返回undef。
关闭文件句柄:close(句柄);
在Wi n d o w s和M S - D O S系统下,设定P e r l中的路径名时可以使用反斜杠作为路径名分隔符,正确方法比如\\ Wi n d o w s \\ u s e r \ \p i e r c e \\ n o v e l . t x t。需要注意的问题是:当在带有双引号字符串中使用反斜杠分隔符路径名时,反斜杠字符序列将被转换成一个特殊的字符。
读取文件
读取文件句柄有两种方法:
1.用尖括号运算符(< >)。将文件句柄放入< >,并将该值赋予一个变量:
Open(MYFILE,”myfile”) or die “Cannot open myfile:$!\n”;
#warn语句输出警告,用法同die.程序不停止,只发出警告。
#Open(MYFILE,”myfile”) or warn“Cannot open myfile:$!\n”;
$line =
读取和输出整个文件(标准写法):
while(defined($a = )){
print $a;
}
简化版:
while(){
print $_;
}
2.用read()函数读取
打开文件:
Open(句柄,”>pathname”);#重写(即源文件有数据将会被覆盖)
exp:
open(MYFILE,">C:/Users/YouZis/Desktop/test.txt"); #打开目录在C:/Users/YouZis/Desktop下的文件名为test.txt的文件
Open(句柄,”>>pathname”);#追加写(即新写入的数据追加在源文件数据后面)
写入文件:
print filehandle LIST; #filehandle为要写入的文件句柄,list为数据列表
Exp:
open(LOGF,">C:/Users/YouZis/Desktop/t.txt") or die "$!";
if(! print LOGF "this entry was written at ",scalar (localtime),"\n"){
warn "Unable to write to the log file:$!";
}
close (LOGF);
在此例子中,"this entry was written at "和scalar (localtime)和"\n"为数据列表。
Ps:scalar (localtime) 此函数将当前时间转化成日历格式
Exp:
#文件拷贝
open(SOURCE,"C:/Users/YouZis/Desktop/test.txt") or die "$!";
open(DEST,">C:/Users/YouZis/Desktop/dest.txt") or die "$!";
print DEST
二进制句柄处理:
binmode(filehandle); #将文件句柄转换为二进制格式,在文件句柄打开之后和对他进行输入输出之前使用该函数,且只能对文件句柄使用一次该函数。若不能区分文件为二进制或者是文本文件使用binmode函数不会造成任何伤害。
Exp:
open (PHO,"C:/Users/YouZis/Desktop/test.gif") or die "$!";
open(DEST,">C:/Users/YouZis/Desktop/dest.gif") or die "$!";
binmode (PHO);
binmode (DEST);
print DEST ;
该程序功能为复制粘贴二进制文件。第一行第二行分别为打开源文件和目标文件,第三行第四行将源文件和目标文件转换成二进制格式。第五行将源文件输出到目标文件。
文件测试运算符:
-X filehandle
-X pathnam
Exp:
print "是否为文件?\n";
$filename = ;
chomp $filename;
if(-s $filename){
warn "$filename contents will be overwritten\n";
warn "$filename was last updated ",-M $filename," days ago.\n";
}